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

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

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

mykhal 27.04.2010 21:07
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
93
1
48 840
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

CURLINFO_RESPONSE_CODE

Pass a pointer to a long to receive the last received HTTP or FTP code. This
option was known as CURLINFO_HTTP_CODE in libcurl 7.10.7 and earlier. This 
will be zero if no server response code has been received. Note that a 
proxy's CONNECT response should be read with CURLINFO_HTTP_CONNECTCODE 
and not this. 
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
}

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

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

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

dgnuff 13.01.2019 04:55

Другие вопросы по теме