libcurl מצרף את תצורת הפרוקסי ל-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 שלו. שם המארח של הפרוקסי הוא מציין מקום; מועמד לא מאומת מרשימת פרוקסי HTTP יכול לספק את הכתובת לבדיקת אתר ציבורי זו. השתמשו בסכימה ובפורט בפועל שלו, ובדקו אם הוא מתיר את מנהרת HTTPS.

יעד HTTPS יכול להשתמש בפרוקסי HTTP. libcurl מטפל במנהרה עבור העברת HTTPS זו. ה-http:// באפשרות הפרוקסי מתאר את החיבור למתווך. שנו אותו ל-https:// רק עבור נקודת קצה של פרוקסי שמקבלת בפועל TLS ועבור בנייה של libcurl שתומכת בכך.

הפכו את המסלול האפקטיבי למכוון

אפשרות פרוקסי מפורשת גוברת על הגדרת סביבת הפרוקסי המתאימה. עקיפה היא החלטה נפרדת: no_proxy בירושה עדיין יכול להוציא את היעד. אם ה-handle הזה חייב להשתמש בפרוקסי הנבחר עבור כל יעד שניתן לו, הגדירו את CURLOPT_NOPROXY כמחרוזת ריקה כחלק מאותה מדיניות.

לעומת זאת, הגדרת CURLOPT_PROXY למחרוזת ריקה משביתה באופן מפורש את השימוש בפרוקסי. הגדרתו ל-NULL מסירה את ההקצאה המפורשת ומתירה שוב התנהגות מבוססת סביבה. שני הערכים הללו משרתים מטרות שונות.

כותרת ספציפית ליעד כמו Content-Type: text/xml אינה בוחרת את הפרוקסי. הוסיפו אותה רק כאשר גוף הבקשה בפועל וה-API של היעד זקוקים לסוג המדיה הזה.

קראו גם את תוצאת ה-HTTP

curl_easy_perform מוצלח אינו אומר שהאתר החזיר מצב HTTP מוצלח. קראו את CURLINFO_RESPONSE_CODE והחילו את טיפול המצבים של היישום. לתגובת ה-CONNECT של הפרוקסי יש ערך משל עצמה, CURLINFO_HTTP_CONNECTCODE; דחיית מנהרה קודמת לכל תגובה של האתר.

CURLOPT_FAILONERROR יכול להתייחס לשגיאות HTTP רבות ככשלים, אך התיעוד שלו מציין חריגי אימות. הפרידו בין אתגר 407 של הפרוקסי לבין מצב היעד.

מאמרים קשורים