Código de status HTTP com libcurl?

92

Como obtenho o código de status HTTP (por exemplo, 200 ou 500) após chamar curl_easy_perform?

twk
fonte
7
boa pergunta. outro poderia ser, como obter uma mensagem de status .. :)
mykhal

Respostas:

135

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

CURLINFO_RESPONSE_CODE

Passe um ponteiro para um long para receber o último código HTTP ou FTP recebido. este
opção era conhecida como CURLINFO_HTTP_CODE na libcurl 7.10.7 e anterior. este
será zero se nenhum código de resposta do servidor for recebido. Observe que um
A resposta CONNECT do proxy deve ser lida com CURLINFO_HTTP_CONNECTCODE 
e não isso. 
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
fonte
5

A outra resposta está absolutamente correta, mas eu também gostaria de acrescentar que pode não ser sensato verificar o código de erro manualmente, o 200código não é o único código que significa sucesso.

Eu recomendo o uso da opção libcurl CURLOPT_FAILONERROR que, quando ativada, fará com que libcurl considere 400e 500-category status uma falha de solicitação e não retornará CURLE_OKda execução.

kralyk
fonte
Como uma extensão disso, dependendo das opções definidas, existem outros códigos não "série 200" que são um sucesso, embora com o entendimento de que mais trabalho é necessário. Dois dos mais conhecidos são 301 e 302. Certamente curl pode ser configurado para lidar com isso automaticamente, mas pode haver casos em que o aplicativo pode querer lidar com eles sozinho. Uma possibilidade pode ser quando https: // está em uso com autenticação de cliente e uma cadeia de certificados completamente nova é necessária para o destino do resultado 301/302.
dgnuff