Mã trạng thái Http với libcurl?


92

Làm cách nào để lấy mã trạng thái HTTP (ví dụ: 200 hoặc 500) sau khi gọi curl_easy_perform?


7
câu hỏi hay. một cái khác có thể là, làm thế nào để nhận được thông báo trạng thái .. :)
mykhal

Câu trả lời:


135

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

CURLINFO_RESPONSE_CODE

Chuyển một con trỏ tới long để nhận mã HTTP hoặc FTP nhận được cuối cùng. Điều này
tùy chọn được gọi là CURLINFO_HTTP_CODE trong libcurl 7.10.7 trở về trước. Điều này
sẽ bằng 0 nếu không nhận được mã phản hồi của máy chủ. Lưu ý rằng một
phản hồi CONNECT của proxy phải được đọc bằng CURLINFO_HTTP_CONNECTCODE 
và không phải cái này. 
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

Câu trả lời khác là hoàn toàn chính xác, nhưng tôi cũng muốn nói thêm rằng có thể không khôn ngoan nếu kiểm tra mã lỗi bằng tay, 200mã không phải là mã duy nhất báo hiệu thành công.

Tôi muốn recoment sử dụng tùy chọn libcurl CURLOPT_FAILONERROR rằng khi kích hoạt sẽ làm cho libcurl xem xét 400500trạng thái -Danh mục một thất bại yêu cầu và sẽ không quay trở lại CURLE_OKtừ thực hiện.


Như một phần mở rộng cho điều này, tùy thuộc vào các tùy chọn được đặt, có những mã khác không phải là "200 series" thành công, mặc dù với sự hiểu biết rằng cần phải làm việc nhiều hơn, Hai trong số những mã được biết đến nhiều nhất là 301 và 302. Chắc chắn có thể bị cong được thiết lập để tự động xử lý những điều này, nhưng có thể có trường hợp ứng dụng có thể muốn tự xử lý chúng. Một khả năng có thể xảy ra là khi https: // được sử dụng với xác thực máy khách và một chuỗi chứng chỉ hoàn toàn mới là cần thiết cho mục tiêu của kết quả 301/302.
dgnuff
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.