¿Código de estado http con libcurl?


92

¿Cómo obtengo el código de estado HTTP (por ejemplo, 200 o 500) después de llamar a curl_easy_perform?


7
buena pregunta. otro podría ser, cómo obtener un mensaje de estado .. :)
mykhal

Respuestas:


135

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

CURLINFO_RESPONSE_CODE

Pase un puntero a un largo para recibir el último código HTTP o FTP recibido. Esta
La opción se conocía como CURLINFO_HTTP_CODE en libcurl 7.10.7 y versiones anteriores. Esta
será cero si no se ha recibido ningún código de respuesta del servidor. Tenga en cuenta que un
La respuesta CONNECT del proxy debe leerse con CURLINFO_HTTP_CONNECTCODE 
y no esto. 
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

La otra respuesta es absolutamente correcta, pero también me gustaría agregar que podría no ser prudente verificar el código de error a mano, el 200código no es el único código que significa éxito.

Recomendaría usar la opción de libcurl CURLOPT_FAILONERROR que cuando se activa hará que libcurl considere 400y los 500estados de categoría una falla en la solicitud y no regrese CURLE_OKde la ejecución.


Como extensión a esto, dependiendo de las opciones establecidas, existen otros códigos que no son de la "serie 200" que son un éxito, aunque en el entendido de que se necesita más trabajo, dos de los más conocidos son 301 y 302. Ciertamente, curl puede ser configurados para manejarlos automáticamente, pero puede haber casos en los que la aplicación quiera manejarlos por sí misma. Una posibilidad podría ser cuando https: // está en uso con la autenticación del cliente y se necesita una cadena de certificados completamente nueva para el objetivo del resultado 301/302.
dgnuff
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.