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 ออกจากสถานะของปลายทาง

บทความที่เกี่ยวข้อง