libcurl을 사용하는 HTTP 상태 코드?


92

curl_easy_perform을 호출 한 후 HTTP 상태 코드 (예 : 200 또는 500)를 어떻게 얻습니까?


7
좋은 질문. 다른 하나는 상태 메시지를받는 방법 일 수 있습니다. .. :)
mykhal

답변:


135

http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html

CURLINFO_RESPONSE_CODE

마지막으로받은 HTTP 또는 FTP 코드를 받으려면 long에 대한 포인터를 전달하십시오. 이
옵션은 libcurl 7.10.7 이전 버전에서 CURLINFO_HTTP_CODE로 알려졌습니다. 이
서버 응답 코드가 수신되지 않으면 0이됩니다. 참고
프록시의 CONNECT 응답은 CURLINFO_HTTP_CONNECTCODE로 읽어야합니다. 
그리고 이것은 아닙니다. 
curl_code = curl_easy_perform (session);
long http_code = 0;
curl_easy_getinfo (session, CURLINFO_RESPONSE_CODE, &http_code);
if (http_code == 200 && curl_code != CURLE_ABORTED_BY_CALLBACK)
{
         //Succeeded
}
else
{
         //Failed
}

5

다른 대답은 절대적으로 정확하지만 오류 코드를 직접 확인하는 것이 현명하지 않을 수도 있으며 200코드가 성공을 나타내는 유일한 코드는 아니라는 점을 덧붙이고 싶습니다 .

libcurl 옵션 CURLOPT_FAILONERROR 를 사용하면 활성화되면 libcurl 이 요청 실패로 간주 400하고 500-category 상태를 요청 실패로 간주 하고 CURLE_OK수행에서 반환하지 않을 것 입니다.


이것에 대한 확장으로, 옵션 세트에 따라 더 많은 작업이 필요하다는 이해에도 불구하고 성공한 다른 비 "200 시리즈"코드가 있습니다. 가장 잘 알려진 두 가지는 301과 302입니다. 확실히 curl은 이를 자동으로 처리하도록 설정되어 있지만 응용 프로그램이 자체적으로 처리하려는 경우가있을 수 있습니다. 한 가지 가능성은 https : //가 클라이언트 인증과 함께 사용 중이고 301/302 결과의 대상에 대해 완전히 새로운 인증서 체인이 필요한 경우 일 수 있습니다.
dgnuff
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.