Đặt một proxy tường minh trên easy handle của libcurl
Cấu hình easy handle của libcurl cho một proxy cụ thể và tách biệt lỗi tùy chọn, lỗi truyền tải và trạng thái HTTP.
libcurl gắn cấu hình proxy vào easy handle thực hiện việc truyền tải. Đặt địa chỉ của trung gian trên handle đó, trong khi để CURLOPT_URL làm URL đích.
Đoạn sau giả định rằng libcurl đã được khởi tạo và handle là một easy handle hợp lệ:
char error[CURL_ERROR_SIZE] = {0};
CURLcode result;
result = curl_easy_setopt(handle, CURLOPT_ERRORBUFFER, error);
if (result == CURLE_OK)
result = curl_easy_setopt(handle, CURLOPT_URL,
"https://example.com/");
if (result == CURLE_OK)
result = curl_easy_setopt(handle, CURLOPT_PROXY,
"http://proxy.example:8080");
if (result == CURLE_OK)
result = curl_easy_perform(handle);
if (result != CURLE_OK)
fprintf(stderr, "%s\n", error[0] ? error
: curl_easy_strerror(result));
Giữ bộ đệm lỗi còn sống trong khi handle tham chiếu đến nó. Trước khi rời khỏi phạm vi của nó, hãy dọn dẹp handle hoặc thay thế hay xóa con trỏ CURLOPT_ERRORBUFFER của nó. Tên máy chủ proxy là một trình giữ chỗ; một ứng viên chưa được xác thực từ danh sách proxy HTTP có thể cung cấp địa chỉ cho bài kiểm tra trang công khai này. Dùng scheme và cổng thực tế của nó, và kiểm tra xem nó có cho phép đường hầm HTTPS hay không.
Đích HTTPS có thể dùng proxy HTTP. libcurl xử lý đường hầm cho lần truyền HTTPS đó. http:// trong tùy chọn proxy mô tả kết nối tới trung gian. Chỉ đổi nó thành https:// cho một điểm cuối proxy thực sự chấp nhận TLS và một bản build libcurl hỗ trợ điều đó.
Hãy làm cho tuyến đường hiệu lực có chủ đích
Một tùy chọn proxy tường minh ghi đè cài đặt môi trường proxy tương ứng. Bỏ qua là một quyết định riêng: một no_proxy kế thừa vẫn có thể loại trừ đích. Nếu handle này phải dùng proxy đã chọn cho mọi đích được cấp, hãy cấu hình CURLOPT_NOPROXY thành chuỗi rỗng như một phần của chính sách đó.
Ngược lại, đặt CURLOPT_PROXY thành chuỗi rỗng sẽ vô hiệu hóa việc dùng proxy một cách tường minh. Đặt nó thành NULL sẽ xóa gán tường minh và cho phép lại hành vi dựa trên môi trường. Hai giá trị đó phục vụ các mục đích khác nhau.
Một tiêu đề dành riêng cho đích như Content-Type: text/xml không chọn proxy. Chỉ thêm nó khi phần thân yêu cầu thực tế và API đích cần loại phương tiện đó.
Cũng hãy đọc kết quả HTTP
Một curl_easy_perform thành công không có nghĩa là trang web đã trả về trạng thái HTTP thành công. Đọc CURLINFO_RESPONSE_CODE và áp dụng cách xử lý trạng thái của ứng dụng. Phản hồi CONNECT của proxy có giá trị riêng, CURLINFO_HTTP_CONNECTCODE; việc từ chối đường hầm xảy ra trước mọi phản hồi của trang web.
CURLOPT_FAILONERROR có thể coi nhiều lỗi HTTP là thất bại, nhưng tài liệu của nó nêu ra các ngoại lệ xác thực. Giữ thách thức 407 của proxy tách biệt khỏi trạng thái của đích.