Http код стану за допомогою libcurl?


92

Як отримати код стану HTTP (наприклад, 200 або 500) після виклику curl_easy_perform?


7
Гарне питання. ще може бути, як отримати повідомлення про статус .. :)
mykhal

Відповіді:


135

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

CURLINFO_RESPONSE_CODE

Передайте вказівник на довгий для отримання останнього отриманого коду HTTP або FTP. Це
Опція була відома як CURLINFO_HTTP_CODE у libcurl 7.10.7 та раніше. Це
буде нулем, якщо код відповіді сервера не отримано. Зверніть увагу, що a
Відповідь 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.