รหัสสถานะ HTTP กับ libcurl?


92

ฉันจะรับรหัสสถานะ HTTP ได้อย่างไร (เช่น 200 หรือ 500) หลังจากเรียก curl_easy_perform


7
คำถามที่ดี. อีกอันอาจเป็นวิธีรับข้อความสถานะ .. :)
mykhal

คำตอบ:


136

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

CURLINFO_RESPONSE_CODE

ส่งตัวชี้ไปที่ long เพื่อรับรหัส HTTP หรือ FTP ที่ได้รับล่าสุด นี้
ตัวเลือกนี้รู้จักกันในชื่อ CURLINFO_HTTP_CODE ใน libcurl 7.10.7 และรุ่นก่อนหน้า นี้
จะเป็นศูนย์หากไม่ได้รับรหัสตอบกลับของเซิร์ฟเวอร์ สังเกตว่าก
ควรอ่านคำตอบ CONNECT ของพร็อกซีด้วย CURLINFO_HTTP_CONNECTCODE 
ไม่ใช่สิ่งนี้ 
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

คำตอบอื่น ๆ นั้นถูกต้อง แต่ฉันก็อยากจะเพิ่มด้วยว่าอาจไม่เป็นการดีที่จะตรวจสอบรหัสข้อผิดพลาดด้วยตนเอง200รหัสไม่ใช่รหัสเดียวที่แสดงถึงความสำเร็จ

ฉันขอแนะนำโดยใช้ตัวเลือก libcurl CURLOPT_FAILONERRORซึ่งเมื่อเปิดใช้งานจะทำให้ libcurl พิจารณา400และ500สถานะ -category เป็นคำขอล้มเหลวและจะไม่กลับมาCURLE_OKจากการดำเนินการ


ในฐานะที่เป็นส่วนเสริมนี้ขึ้นอยู่กับชุดตัวเลือกมีรหัสอื่น ๆ ที่ไม่ใช่ "200 series" ที่ประสบความสำเร็จแม้ว่าจะมีความเข้าใจว่าจำเป็นต้องใช้งานมากขึ้น แต่สองสิ่งที่รู้จักกันดีที่สุดคือ 301 และ 302 แน่นอนว่าสามารถม้วนงอได้ ตั้งค่าให้จัดการสิ่งเหล่านี้โดยอัตโนมัติ แต่อาจมีบางกรณีที่แอปพลิเคชันอาจต้องการจัดการเอง ความเป็นไปได้อย่างหนึ่งอาจเกิดขึ้นเมื่อใช้ https: // กับการพิสูจน์ตัวตนไคลเอ็นต์และจำเป็นต้องใช้สายการรับรองใหม่ทั้งหมดสำหรับเป้าหมายของผลลัพธ์ 301/302
dgnuff
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.