CURLRequest 라이브러리는 서버와 통신할 수있는 CURL 기반의 경량 HTTP 클라이언트입니다.
가장 널리 사용되는 Guzzle HTTP Client 라이브러리의 인터페이스를 모델로 합니다.
인터페이스가 Guzzle 구문과 동일하게 유지되므로, 이 라이브러리를 대신 Guzzle로 바꾸어도 거의 변경없이 사용 가능합니다.
// 서비스 클래스를 통해 로드 $client1 = \Config\Services::curlrequest(); // service() 헬퍼를 통해 로드 $client2 = service('curlrequest'); // cURL 요청 처리 방법을 수정하기 위해 옵션 배열을 첫 번째 매개 변수로 전달할 수 있습니다. $client3 = \Config\Services::curlrequest([ 'baseURI' => 'http://google.co.kr', 'timeout' => 3, ]);
CURL 요청 작업은 `request` 객체를 작성하여 요청을 처리하고 `response` 객체를 받습니다.
대부분의 통신은 `request()` 메소드를 통해 이루어집니다.
이 메소드는 요청 결과를 `Response` 인스턴스로 반환합니다.
$response = $client->request('GET', 'https://www.google.com/search', ['q' => 'codeigniter']);
각 HTTP 요청에 대한 단축 메소드도 제공합니다.
$client->get('http://example.com'); $client->delete('http://example.com'); $client->head('http://example.com'); $client->options('http://example.com'); $client->patch('http://example.com'); $client->put('http://example.com'); $client->post('http://example.com');
각 request() 호출은 유용한 정보와 메소드를 포함하는 `response` 객체를 반환합니다.
서버의 상태를 확인할 수 있습니다.
echo $response->getStatusCode(); // 302 echo $response->getHeader('Content-Type'); // Content-Type: text/html; charset=UTF-8
응답에서 헤더를 검색할 수 있습니다
echo $response->getHeaderLine('Content-Type'); // text/html; charset=UTF-8
헤더를 통해 전달되는 모든 데이터를 반환합니다.
foreach ($response->getHeaders() as $name => $value) { echo $name .': '. $response->getHeaderLine($name) ."\n"; }
Cache-control: no-store, max-age=0, no-cache, private Content-Type: text/html; charset=UTF-8 Location: https://www.google.com/webhp Content-Security-Policy: object-src 'none';base-uri 'self';script-src 'nonce-F5dYfZLyKezr8FSpkutVWQ' 'strict-dynamic' 'report-sample' 'unsafe-eval' 'unsafe-inline' https: http:;report-uri https://csp.withgoogle.com/csp/gws/xsrp P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info." Date: Wed, 25 Dec 2024 15:50:29 GMT Server: gws Content-Length: 225 X-XSS-Protection: 0 X-Frame-Options: SAMEORIGIN Set-Cookie: NID=520=GfxF_rTp4LcD3-2i_dxFLZ8QoU7rcRrWrgmHY1t4DfmgUkvfNFYMp4IDC5xfn-VcDoLqFjhysIoWBD2DurNdOMCaEzMeQtvppg_h7WPIyVv_t3JDS_nnJ0iw15_wqZo3xvlL-BYx0fJ8ZQQfg1Gglbu8f02aneBP6gAGD4HxxSrfh6zmPtdh8rDCffOp9jir; expires=Thu, 26-Jun-2025 15:50:29 GMT; path=/; domain=.google.com; HttpOnly Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
HTML 본문을 반환 합니다.
echo $response->getBody();
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>302 Moved</TITLE></HEAD><BODY> <H1>302 Moved</H1> The document has moved <A HREF="https://www.google.com/webhp">here</A>. </BODY></HTML>
request() 메소드에 전달할 수 있는 모든 옵션에 대해 설명합니다.
`Location` 헤더에 따른 리디렉션 처리 방법을 설정합니다.(`true` or `false`);
// false로 설정하면 리디렉션 처리하지 않습니다. $client->request('GET', 'http://example.com', ['allow_redirects' => false]); // true로 설정하면 리디렉션 처리 합니다. $client->request('GET', 'http://example.com', ['allow_redirects' => true]);
HTTP Basic과 Digest 인증에 대한 인증 정보를 제공합니다.
// HTTP Basic 인증 정보 설정 $client->request('GET', 'http://example.com', ['auth' => ['username', 'password', 'basic']]); // Digest 인증 인증 정보 설정 $client->request('GET', 'http://example.com', ['auth' => ['username', 'password', 'digest']]);
PUT, POST, DELETE, PATCH 요청에 대한 요청 본문을 설정합니다.
$body = json_encode(['username' => 'username', 'password' => 'password']); // 요청 본문을 설정(Guzzle API 호환) $client->request('PUT', 'http://example.com', ['body' => $body]); // setBody() 메소드 사용하여 설정 $client->setBody($body)->request('PUT', 'http://example.com');
PEM 형식의 클라이언트측 인증서를 설정합니다.
// 인증서 파일의 경로는 절대경로로 지정합니다. $client->request('GET', 'http://example.com', ['cert' => ['/path/getServer.pem']); // 인증서 사용시 비밀번호 사용 $client->request('GET', 'http://example.com', ['cert' => ['/path/getServer.pem', 'password']);
웹 사이트 연결 시도 제한 시간을 초 단위로 설정합니다.
// 제한 시간 2분 $response->request('GET', 'http://example.com', ['connect_timeout' => 120]); // 제한 시간 없음 $response->request('GET', 'http://example.com', ['connect_timeout' => 0]);
웹 사이트의 쿠키를 읽고, 저장할 때 사용할 파일 이름을 설정합니다.
// 쿠키 파일의 경로는 절대 경로로 지정합니다. $response->request('GET', 'http://example.com', ['cookie' => WRITEPATH . 'CookieSaver.txt']);
디버깅 내용을 STDOUT으로 출력 여부를 설정합니다.
// 디버깅 내용을 STDOUT으로 출력 $response->request('GET', 'http://example.com', ['debug' => true]); // 디버깅 내용을 서버 오류 로그에 기록 $response->request('GET', 'http://example.com', ['debug' => false]); // 디버깅 내용을 `/usr/local/curl_log.txt`에 기록 $response->request('GET', 'http://example.com', ['debug' => '/usr/local/curl_log.txt']);
설정시 요청을 보내기 전에 일시 중지할 수 있습니다.
// 2초 일시 정지 $response->request('GET', 'http://example.com', ['delay' => 2000]);
POST 요청에 대해 `application/x-www-form-urlencoded` 방식으로 폼(form) 데이터를 보냅니다.
$client->request('POST', 'http://example.com', [ 'form_params' => [ 'foo' => 'bar', 'baz' => ['hi', 'there'], ], ]);
요청에 필요한 헤더를 설정합니다.
$client->request('POST', 'http://example.com', [ 'headers' => [ 'User-Agent' => 'testing/1.0', 'Accept' => 'application/json', 'X-Foo' => ['Bar', 'Baz'], ], ]);
오류 내용을 반환 여부를 설정합니다.
// HTTP 코드가 400 이상이면 오류를 내고 프로그램을 멈춥니다. $client->request('GET', 'http://example.com'); // 오류 내용을 반환합니다. $res = $client->request('GET', 'http://example.com', ['http_errors' => false]); echo $res->getStatusCode(); // 500
요청 본문을 JSON으로 인코딩하여 전송합니다.
$response = $client->request('PUT', 'http://example.com', ['json' => ['foo' => 'bar']]);
`CURLFile` 인스턴스로 전달된 파일을 POST 요청을 통해 업로드합니다.
`multipart`는 `form_params` 옵션과 함께 사용할 수 없습니다.
$response = $client->request('POST', 'http://example.com/upload', [ 'foo' => 'bar', 'userfile' => new \CURLFile('/path/to/file.txt'), ]);
GET과 함께 전송할 쿼리 문자열을 설정합니다.
$response = $client->request('GET', 'http://example.com/upload', ['query' => ['foo' => 'bar']]);
서버의 응답 대기 시간을 설정합니다.
// 대기 시간을 2분으로 제한 $response->request('GET', 'http://example.com', ['timeout' => 120]); // 무기한 대기 $response->request('GET', 'http://example.com', ['timeout' => 0]);
USER_AGENT를 설정합니다.
$response->request('GET', 'http://example.com', ['user_agent' => 'CodeIgniter Framework v4']);
SSL 인증서 확인 여부를 설정합니다.
// SSL 인증서 확인 $client->request('GET', 'http://example.com', ['verify' => true]); // SSL 인증서 확인 안함 $client->request('GET', 'http://example.com', ['verify' => false]); // SSL 이증시 사용할 인증서 지정 $client->request('GET', 'http://example.com', ['verify' => '/path/to/cert.pem']);
HTTP 프로토콜 버전을 설정합니다.(일반적으로 1.0, 1.1, 2.0)
// HTTP/1.0으로 설정 $client->request('GET', 'http://example.com', ['version' => 1.0]);