การตั้ง proxy แบบชัดเจนบน easy handle ของ libcurl
กำหนดค่า easy handle ของ libcurl สำหรับ proxy ที่ระบุ และแยกข้อผิดพลาดของตัวเลือก ความล้มเหลวในการถ่ายโอน และสถานะ HTTP
libcurl เชื่อมการกำหนดค่า proxy เข้ากับ easy handle ที่ทำการถ่ายโอน ตั้งที่อยู่ของตัวกลางบน handle นั้น โดยปล่อยให้ CURLOPT_URL เป็น URL ปลายทาง
ส่วนย่อยต่อไปนี้ถือว่า libcurl ถูกเริ่มต้นแล้วและ handle เป็น easy handle ที่ถูกต้อง:
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));
คงบัฟเฟอร์ข้อผิดพลาดให้มีชีวิตอยู่ตราบที่ handle อ้างอิงถึงมัน ก่อนออกจากขอบเขต ให้ล้าง handle หรือแทนที่หรือล้างตัวชี้ CURLOPT_ERRORBUFFER ของมัน ชื่อโฮสต์ของ proxy เป็นตัวแทน; ผู้สมัครที่ไม่ได้ตรวจสอบสิทธิ์จากรายการ proxy HTTPสามารถให้ที่อยู่สำหรับการทดสอบเว็บไซต์สาธารณะนี้ได้ ใช้ scheme และพอร์ตจริงของมัน และตรวจสอบว่าอนุญาตอุโมงค์ HTTPS หรือไม่
ปลายทาง HTTPS สามารถใช้ proxy HTTP ได้ libcurl จัดการอุโมงค์สำหรับการถ่ายโอน HTTPS นั้น http:// ในตัวเลือก proxy อธิบายการเชื่อมต่อกับตัวกลาง เปลี่ยนเป็น https:// เฉพาะจุดสิ้นสุด proxy ที่ยอมรับ TLS จริงและ build ของ libcurl ที่รองรับเท่านั้น
ทำให้เส้นทางที่มีผลเป็นไปโดยเจตนา
ตัวเลือก proxy แบบชัดเจนแทนที่การตั้งค่าสภาพแวดล้อม proxy ที่สอดคล้องกัน การข้ามเป็นการตัดสินใจแยกต่างหาก: no_proxy ที่สืบทอดมาสามารถกีดกันปลายทางได้เช่นกัน หาก handle นี้ต้องใช้ proxy ที่เลือกสำหรับทุกปลายทางที่ได้รับ ให้กำหนดค่า CURLOPT_NOPROXY เป็นสตริงว่างเป็นส่วนหนึ่งของนโยบายนั้น
ในทางกลับกัน การตั้งค่า CURLOPT_PROXY เป็นสตริงว่างจะปิดการใช้ proxy อย่างชัดเจน การตั้งค่าเป็น NULL จะลบการกำหนดแบบชัดเจนและอนุญาตพฤติกรรมตามสภาพแวดล้อมอีกครั้ง ค่าสองค่านี้มีจุดประสงค์ต่างกัน
ส่วนหัวเฉพาะเป้าหมายเช่น Content-Type: text/xml ไม่ได้เลือก proxy เพิ่มเฉพาะเมื่อเนื้อหาคำขอจริงและ API ปลายทางต้องการสื่อชนิดนั้น
อ่านผลลัพธ์ HTTP ด้วย
curl_easy_perform ที่สำเร็จไม่ได้หมายความว่าเว็บไซต์ส่งคืนสถานะ HTTP ที่สำเร็จ อ่าน CURLINFO_RESPONSE_CODE และใช้การจัดการสถานะของแอปพลิเคชัน การตอบกลับ CONNECT ของ proxy มีค่าของตัวเอง CURLINFO_HTTP_CONNECTCODE; การปฏิเสธอุโมงค์เกิดขึ้นก่อนการตอบกลับใด ๆ ของเว็บไซต์
CURLOPT_FAILONERROR สามารถถือว่าข้อผิดพลาด HTTP หลายอย่างเป็นความล้มเหลว แต่เอกสารของมันระบุข้อยกเว้นการตรวจสอบสิทธิ์ แยกการท้าทาย 407 ของ proxy ออกจากสถานะของปลายทาง