【问题标题】:Http status code with libcurl?带有 libcurl 的 Http 状态码?
【发布时间】:2010-09-22 09:41:27
【问题描述】:

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

【问题讨论】:

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

标签: c http libcurl


【解决方案1】:

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
}

【讨论】:

    【解决方案2】:

    另一个答案是绝对正确的,但我还要补充一点,手动检查错误代码可能不明智,200 代码并不是唯一表示成功的代码。

    我建议使用 libcurl 选项 CURLOPT_FAILONERROR,当激活该选项时,libcurl 会将 400500 -category 状态视为请求失败,并且不会从执行返回 CURLE_OK

    【讨论】:

    • 作为对此的扩展,根据设置的选项,还有其他非“200 系列”代码是成功的,尽管需要做更多的工作,其中两个最著名的是301 和 302。当然 curl 可以设置为自动处理这些,但在某些情况下,应用程序可能希望自己处理它们。一种可能是当 https:// 与客户端身份验证一起使用时,301 / 302 结果的目标需要一个全新的证书链。
    猜你喜欢
    • 2013-11-21
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    相关资源
    最近更新 更多