Code d'état HTTP avec libcurl?


92

Comment obtenir le code d'état HTTP (par exemple 200 ou 500) après avoir appelé curl_easy_perform?


7
bonne question. un autre pourrait être, comment obtenir un message d'état .. :)
mykhal

Réponses:


135

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

CURLINFO_RESPONSE_CODE

Passez un pointeur vers un long pour recevoir le dernier code HTTP ou FTP reçu. Ce
L'option était connue sous le nom de CURLINFO_HTTP_CODE dans la libcurl 7.10.7 et les versions antérieures. Ce
sera égal à zéro si aucun code de réponse du serveur n'a été reçu. Notez qu'un
La réponse CONNECT du proxy doit être lue avec CURLINFO_HTTP_CONNECTCODE 
et pas ça. 
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

L'autre réponse est tout à fait correcte, mais je voudrais également ajouter qu'il n'est peut-être pas judicieux de vérifier le code d'erreur à la main, le 200code n'est pas le seul code qui signifie le succès.

Je recommande d'utiliser l'option libcurl CURLOPT_FAILONERROR qui, lorsqu'elle est activée, fera que libcurl considère 400et 500que les statuts de catégorie sont un échec de la demande et ne reviendra pas CURLE_OKde perform.


En tant qu'extension à cela, en fonction de l'ensemble d'options, il existe d'autres codes non "série 200" qui sont un succès, mais avec la compréhension que plus de travail est nécessaire, deux des plus connus étant 301 et 302. Certainement curl peut être configuré pour les gérer automatiquement, mais il peut y avoir des cas où l'application voudra peut-être les gérer elle-même. Une possibilité pourrait être lorsque https: // est utilisé avec l'authentification client et qu'une chaîne de certificats complètement nouvelle est nécessaire pour la cible du résultat 301/302.
dgnuff
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.