Kode status http dengan libcurl?


92

Bagaimana cara mendapatkan kode status HTTP (misalnya 200 atau 500) setelah memanggil curl_easy_perform?


7
Pertanyaan bagus. satu lagi bisa, bagaimana mendapatkan pesan status .. :)
mykhal

Jawaban:


136

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

CURLINFO_RESPONSE_CODE

Lewati pointer ke long untuk menerima kode HTTP atau FTP yang terakhir diterima. Ini
Opsi ini dikenal sebagai CURLINFO_HTTP_CODE di libcurl 7.10.7 dan yang lebih lama. Ini
akan menjadi nol jika tidak ada kode respon server yang diterima. Perhatikan bahwa a
tanggapan CONNECT proxy harus dibaca dengan CURLINFO_HTTP_CONNECTCODE 
dan bukan ini. 
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
}

6

Jawaban lain benar-benar benar, tetapi saya juga ingin menambahkan bahwa mungkin tidak bijaksana untuk memeriksa kode kesalahan dengan tangan, 200kode tersebut bukan satu-satunya kode yang menandakan kesuksesan.

Saya akan merekomendasikan penggunaan opsi libcurl CURLOPT_FAILONERROR yang ketika diaktifkan akan membuat libcurl mempertimbangkan 400dan 500status -kategori permintaan gagal dan tidak akan kembali CURLE_OKdari perform.


Sebagai perpanjangan dari ini, tergantung pada set opsi, ada kode non "200 series" lain yang berhasil, meskipun dengan pemahaman bahwa lebih banyak pekerjaan diperlukan, Dua yang paling dikenal adalah 301 dan 302. Tentu saja bisa jadi curl mengatur untuk menangani ini secara otomatis, tetapi mungkin ada kasus di mana aplikasi mungkin ingin menanganinya sendiri. Salah satu kemungkinannya adalah ketika https: // digunakan dengan otentikasi klien, dan rantai sertifikat yang benar-benar baru diperlukan untuk target hasil 301/302.
dgnuff
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.