带有libcurl的Http状态代码?


92

调用curl_easy_perform后如何获取HTTP状态代码(例如200或500)?


7
好问题。另一个可能是,如何获取状态消息.. :)
mykhal

Answers:


135

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

CURLINFO_RESPONSE_CODE

将指针传递给long以接收最后收到的HTTP或FTP代码。这个
该选项在libcurl 7.10.7及更早版本中称为CURLINFO_HTTP_CODE。这个
如果未收到服务器响应代码,则为零。请注意
代理的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考虑400500-category状态请求失败,并且不会CURLE_OK从执行返回。


作为对此的扩展,根据选项集的不同,还有其他一些非“ 200系列”代码也很成功,尽管它们的理解是需要做更多的工作,其中最著名的两个是301和302。当然可以卷曲设置为自动处理它们,但是在某些情况下,应用程序可能希望自己处理它们。一种可能是将https://与客户端身份验证一起使用,并且需要使用全新的证书链作为301/302结果的目标。
dgnuff
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.