libcurlを使用したHttpステータスコード?


92

curl_easy_performを呼び出した後、HTTPステータスコード(200または500など)を取得するにはどうすればよいですか?


7
良い質問。もう1つは、ステータスメッセージの取得方法です。.. :)
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と呼ばれていました。この
サーバー応答コードが受信されていない場合、ゼロになります。注意してください
プロキシの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使用すること400をお500勧めします。アクティブ化すると、libcurlが考慮され、-categoryステータスがリクエストの失敗を示しCURLE_OK、実行から戻りません。


これに対する拡張として、オプションセットに応じて、より多くの作業が必要であるという理解にもかかわらず、成功した他の「200シリーズ」以外のコードがあります。最もよく知られている2つは301と302です。これらを自動的に処理するように設定しますが、アプリケーションがそれ自体を処理したい場合があります。1つの可能性は、https://がクライアント認証で使用されており、301/302結果のターゲットに完全に新しい証明書チェーンが必要な場合です。
dgnuff
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.