Codice di stato http con libcurl?


92

Come ottengo il codice di stato HTTP (es. 200 o 500) dopo aver chiamato curl_easy_perform?


7
buona domanda. un altro potrebbe essere, come ottenere un messaggio di stato .. :)
mykhal

Risposte:


135

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

CURLINFO_RESPONSE_CODE

Passa un puntatore a un long per ricevere l'ultimo codice HTTP o FTP ricevuto. Questo
opzione era conosciuta come CURLINFO_HTTP_CODE in libcurl 7.10.7 e precedenti. Questo
sarà zero se non è stato ricevuto alcun codice di risposta del server. Nota che a
la risposta CONNECT del proxy dovrebbe essere letta con CURLINFO_HTTP_CONNECTCODE 
e non questo. 
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'altra risposta è assolutamente corretta, ma vorrei anche aggiungere che potrebbe non essere saggio controllare manualmente il 200codice di errore, il codice non è l'unico codice che significa successo.

Raccomanderei di utilizzare l'opzione libcurl CURLOPT_FAILONERROR che, una volta attivata, farà sì che libcurl consideri 400e 500-category gli stati un errore di richiesta e non tornerà CURLE_OKdall'esecuzione.


Come estensione a questo, a seconda delle opzioni impostate, ci sono altri codici non "serie 200" che hanno successo, anche se con la consapevolezza che è necessario più lavoro, due dei più noti sono 301 e 302. Certamente il curl può essere impostato per gestirli automaticamente, ma potrebbero esserci casi in cui l'applicazione potrebbe volerli gestire da sola. Una possibilità potrebbe essere quando https: // è in uso con l'autenticazione del client ed è necessaria una catena di certificati completamente nuova per la destinazione del risultato 301/302.
dgnuff
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.