Libcurl ile HTTP durum kodu?


93

Curl_easy_perform'u çağırdıktan sonra HTTP durum kodunu (ör. 200 veya 500) nasıl alabilirim?


7
iyi soru. bir diğeri olabilir, nasıl durum mesajı alınır .. :)
mykhal

Yanıtlar:


137

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

CURLINFO_RESPONSE_CODE

Son alınan HTTP veya FTP kodunu almak için uzun bir işaretçiye bir işaretçi iletin. Bu
seçenek libcurl 7.10.7 ve öncesinde CURLINFO_HTTP_CODE olarak biliniyordu. Bu
hiçbir sunucu yanıt kodu alınmadıysa sıfır olacaktır. Bir
proxy'nin CONNECT yanıtı CURLINFO_HTTP_CONNECTCODE ile okunmalıdır 
ve bu değil. 
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

Diğer cevap kesinlikle doğrudur, ancak hata kodunu elle kontrol etmenin akıllıca olmayabileceğini de eklemek isterim, 200kod, başarıyı gösteren tek kod değildir.

Libcurl seçeneği CURLOPT_FAILONERROR'u kullanarak, etkinleştirildiğinde libcurl'un bir istek hatası olarak kabul edeceğini 400ve 500-category durumlarının bir istek hatası olacağını ve perform'den geri dönmeyeceğini telafi ederim CURLE_OK.


Bunun bir uzantısı olarak, seçenekler kümesine bağlı olarak, daha fazla çalışmanın gerekli olduğu anlayışına rağmen başarılı olan diğer "200 serisi" olmayan kodlar vardır, en iyi bilinenlerden ikisi 301 ve 302'dir. Kesinlikle curl olabilir. bunları otomatik olarak işleyecek şekilde ayarlandı, ancak uygulamanın bunları kendi kendine halletmek isteyebileceği durumlar olabilir. Bir olasılık, https: //'nin istemci kimlik doğrulamasında kullanılması ve 301/302 sonucunun hedefi için tamamen yeni bir sertifika zincirinin gerekli olması olabilir.
dgnuff
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.