HTTP 응답
모든 HTTP 요청은 HTTP 응답을 포함한다. HTTP 응답은 메타데이터와 응답 바디(response body)의 집합이다. 바디(body)는 때때로 0 바이트일 수 있으므로 존재하지 않을 수 있다. 그러나 HTTP 응답은 항상 응답 헤더를 가질 것이다.
응답 바디는 쓰기 콜백과 헤더 콜백으로의 응답 헤더로 전달되지만 때로는 어플리케이션이 데이터의 크기를 알고자 한다.
서버 헤더가 말한 응답의 크기는 다음과 같이 curl_easy_getinfo()로 추출할 수 있다:
double size;
curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &size);
그러나, 전송이 완료된 다음까지 기다릴 수 있다면, (또한 이것은 좀더 신뢰할 수 있는 방법이다), 왜냐하면 모든 URL이 크기를 제공하지 않기 때문이다(예 : 요청에 따라 컨텐츠를 생성하는 서버의 경우) 대신에 가장 최근에 전송된 데이터를 다운로드 한 양을 물을 수 있다.
double size;
curl_easy_getinfo(curl, CURLINFO_SIZE_DOWNLOAD, &size);
HTTP 응답 코드
모든 HTTP 응답은 HTTP 응답 코드가 포함된 단일 행으로 시작한다. 요청의 상태에 대한 서버의 아이디어가 들어있는 3자리 숫자이다. 숫자는 HTTP 표준 스펙에 상세히 기재되어 있지만 기본적으로 다음과 같은 범위로 나뉜다:
코드 | 의미 |
---|---|
1xx | 일시적인 코드, 새로운 코드가 따름 |
2xx | 정상 |
3xx | 컨텐츠가 다른 곳에 위치 |
4xx | 클라이언트 문제로 인해 실패 |
5xx | 서버 문제로 인해 실패 |
다음과 같이 전송 후 응답 코드를 추출할 수 있다
long code;
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &code);
HTTP 응답 코드 "에러"에 대해서
응답 코드 번호에는 서버가 요청을 처리하는 도중에 에러가 발생했음을 알리기 위해 사용하는 숫자들(4xx와 5xx 범위)을 포함할 수 있는 동안에, 이것은 에러를 리턴하기위해 libcurl에게 알리지 않음을 인식하는 것은 중요하다.
libcurl이 HTTP 전송을 수행하기 위해서 물을 때, HTTP 전송에 실패하면 에러를 리턴할 것이다. 그러나, HTTP 404 등을 얻는 것은 libcurl에 대한 문제가 아니다. 이것은 HTTP 전송 에러가 아니다. 사용자는 서버의 HTTP 응답을 테스트하기 위해 클라이언트를 잘 작성할 수 있을 것이다.
400 HTTP 응답 코드를 처리하고 오류로 다루는 curl을 주장한다면, libcurl은 CURLE_HTTP_RETURNED_ERROR를 리턴하도록 curl에게 명령을 설정하는 CURLOPT_FAILONERROR 옵션을 제공한다. 가능한 한 빨리 오류를 리턴하고 응답 바디(response body)를 전달하지 않는다.