Код статуса http с libcurl?

92

Как мне получить код состояния HTTP (например, 200 или 500) после вызова curl_easy_perform?

Twk
источник
7
хороший вопрос. еще один может быть, как получить статусное сообщение .. :)
михал

Ответы:

136

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

CURLINFO_RESPONSE_CODE

Передайте указатель на long, чтобы получить последний полученный код HTTP или FTP. Этот
опция была известна как CURLINFO_HTTP_CODE в libcurl 7.10.7 и ранее. Этот
будет равно нулю, если код ответа сервера не был получен. Обратите внимание, что
ответ 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
}
Винко Врсалович
источник
6

Другой ответ абсолютно правильный, но я также хотел бы добавить, что, возможно, нецелесообразно проверять код ошибки вручную, 200код - не единственный код, который означает успех.

Я бы рекомендовал использовать опцию libcurl CURLOPT_FAILONERROR, которая при активации заставит libcurl рассматривать 400и 500-category статусы как сбой запроса и не будет возвращаться CURLE_OKиз выполнения.

кралык
источник
В дополнение к этому, в зависимости от установленных опций, есть другие коды, не относящиеся к «серии 200», которые являются успешными, хотя и с пониманием того, что требуется дополнительная работа. Два из самых известных - это 301 и 302. Конечно, завиток может быть настроен для их автоматической обработки, но могут быть случаи, когда приложение может захотеть обработать их само. Одна из возможностей может заключаться в том, что https: // используется с аутентификацией клиента, и для цели результата 301/302 требуется совершенно новая цепочка сертификатов.
dgnuff