HTTP-Statuscode mit libcurl?

92

Wie erhalte ich den HTTP-Statuscode (z. B. 200 oder 500) nach dem Aufruf von curl_easy_perform?

twk
quelle
7
gute Frage. Eine andere könnte sein, wie man eine Statusmeldung bekommt .. :)
Mykhal

Antworten:

135

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

CURLINFO_RESPONSE_CODE

Übergeben Sie einen Zeiger auf einen Long, um den zuletzt empfangenen HTTP- oder FTP-Code zu erhalten. Dies
Die Option war in libcurl 7.10.7 und früheren Versionen als CURLINFO_HTTP_CODE bekannt. Dies
wird Null sein, wenn kein Server-Antwortcode empfangen wurde. Beachten Sie, dass a
Die CONNECT-Antwort des Proxys sollte mit CURLINFO_HTTP_CONNECTCODE gelesen werden 
und nicht das. 
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
}
Vinko Vrsalovic
quelle
5

Die andere Antwort ist absolut richtig, aber ich möchte auch hinzufügen, dass es möglicherweise nicht ratsam ist, den Fehlercode von Hand zu überprüfen. Der 200Code ist nicht der einzige Code, der Erfolg anzeigt.

Ich würde empfehlen, die libcurl-Option CURLOPT_FAILONERROR zu verwenden , die bei Aktivierung dazu führt, dass libcurl den Status " -category" als Anforderungsfehler betrachtet 400und 500nicht CURLE_OKvon "perform" zurückkehrt.

kralyk
quelle
Als Erweiterung dazu gibt es abhängig von den eingestellten Optionen andere Codes, die nicht der Serie "200" entsprechen und erfolgreich sind, wenn auch mit dem Verständnis, dass mehr Arbeit erforderlich ist. Zwei der bekanntesten sind 301 und 302. Sicherlich kann es sich um eine Kräuselung handeln Richten Sie diese automatisch ein, aber es kann Fälle geben, in denen die Anwendung sie möglicherweise selbst verarbeiten möchte. Eine Möglichkeit besteht darin, dass https: // für die Clientauthentifizierung verwendet wird und für das Ziel des 301/302-Ergebnisses eine vollständig neue Zertifikatkette erforderlich ist.
dgnuff