HTTP 요청

HTTP 요청은 무엇을 할 것인지 서버에게 알릴 때 curl이 서버에 보내는 것이다.데이터를 얻거나 데이터를 보내려고 할 때이다. HTTP와 관련된 모든 전송은 HTTP 요청으로 시작된다.

HTTP 요청은 메소드, 경로, HTTP 버전 및 요청 헤더 집합이 포함된다. 물론 어플리케이션을 사용하는 libcurl은 모든 이러한 필드를 조정할 수 있다.

요청 메서드

모든 HTTP 요청은 "메서드(method)"를 포함한다. 때로는 "동사"라고도 한다(의 의미를 갖는다?). 일반적으로 GET, HEAD, POST 또는 PUT과 비슷하지만 DELETE, PATCH 및 OPTIONS와 같이 좀더 복잡한 것들이 있다.

일반적으로 전송을 설정하고 수행하기 위해서 libcurl을 사용할 때에, 특정 요청 방법은 사용하는 옵션에 따라 암시된다. URL을 물으면, libcurl이 POST 메서드를 사용하도록 만들게 되는 CURLOPT_POSTFIELDS 예제를 설정하는 동안 메서드가 GET된다는 것을 의미한다. 만약 CURLOPT_UPLOAD를 true로 설정하면, libcurl은 HTTP 요청 등으로 PUT 메서드를 보내게 될 것이다. CURLOPT_NOBODY을 요구하는 것은 libcurl이 HEAD를 사용하도록 만들게 될 것이다.

그러나, 때로는 이러한 기본 HTTP 메서드는 전송을 위해 사용되기에는 충분하지 않거나 단순하지 않다. CURLOPT_CUSTOMREQUEST으로 원하는 특정 메서드를 사용하도록 libcurl에게 명령을 내릴 수 있다. 예를 들어, 원하는 URL에 DELETE 메서드를 보내려는 경우 :

curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/file.txt");

CURLOPT_CUSTOMREQUEST 설정은 HTTP 요청 행에서 메서드로 사용할 단일 키워드 이어야 한다. HTTP 요청 헤더를 변경하거나 추가하고자 한다면 다음 절을 보길 바란다.

HTTP 요청 헤더 사용자 정의

libcurl이 요청한 데이터 전송을 수행하는 과정에서 HTTP 요청을 할 때, 주어진 작업을 수행하는데 적합한 HTTP 헤더의 집합을 사용하여 해당 요청을 보낸다.

만약 URL "http://localhost/file1.txt"가 주어진 경우, libcurl 7.51.0은 서버에 다음의 요청을 보내게 된다:

GET /file1.txt HTTP/1.1
Host: localhost
Accept: */*

문자열 "foobar"(6자, 여기서는 시각적 구분 기호로만 사용되는 따옴표) 로 CURLOPT_POSTFIELDS를 또한 설정하기 위해 어플리케이션에 대신 지시하고자 한다면, 다음의 헤더를 보내게 된다:

POST /file1.txt HTTP/1.1
Host: localhost
Accept: */*
Content-Length: 6
Content-Type: application/x-www-form-urlencoded

libcurl이 보내는 헤거의 기본 집합에 만족하지 않으면, 어플리케이션은 HTTP 요청에 헤더를 추가, 변경 또는 제거하기 위한 힘을 갖는다.

헤더 추가

요청에 포함되지 않는 헤더를 추가하려면, CURLOPT_HTTPHEADER를 이용해서 추가한다. Mr. Smith를 포함하는 Name:을 호출하는 헤더를 원한다고 가정해 보자:

struct curl_slist *list = NULL;
list = curl_slist_append(list, "Name: Mr Smith");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
curl_easy_perform(curl);
curl_slist_free_all(list); /* free the list again */

헤더 변경

이런 기본 헤더중 하나가 만족스럽지 않으면, 변경할 수 있다. 기본 Host: 헤더가 잘못되었다고 생각한다면, libcurl에게 다음과 같이 말할 수 있다.

struct curl_slist *list = NULL;
list = curl_slist_append(list, "Host: Alternative");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
curl_easy_perform(curl);
curl_slist_free_all(list); /* free the list again */

헤더 제거

ㅇㅇ

struct curl_slist *list = NULL;
list = curl_slist_append(list, "Accept:");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
curl_easy_perform(curl);
curl_slist_free_all(list); /* free the list again */

컨텐츠 없이 헤더를 제공

ㅁㅁ

struct curl_slist *list = NULL;
list = curl_slist_append(list, "Moo;");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
curl_easy_perform(curl);
curl_slist_free_all(list); /* free the list again */

Referrer

ㅇㅇ

curl_easy_setopt(curl, CURLOPT_REFERER, "https://example.com/fromhere/");
curl_easy_perform(curl);

자동 referrer

ㅈㅈ

curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_AUTOREFERER, 1L);
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/redirected.cgi");
curl_easy_perform(curl);

results matching ""

    No results matching ""