Nastavenie explicitnej proxy na easy handle libcurl
Nakonfigurujte easy handle libcurl pre konkrétnu proxy a oddeľte chyby volieb, zlyhania prenosu a stav HTTP.
libcurl pripája konfiguráciu proxy k easy handle, ktorý vykonáva prenos. Nastavte adresu sprostredkovateľa na tomto handle, pričom CURLOPT_URL ponechajte ako URL cieľa.
Nasledujúci fragment predpokladá, že libcurl je inicializovaný a handle je platný 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));
Udržujte chybový buffer živý, kým naň handle odkazuje. Pred opustením jeho rozsahu vyčistite handle alebo nahraďte či vymažte jeho ukazovateľ CURLOPT_ERRORBUFFER. Názov hostiteľa proxy je zástupný symbol; neautentizovaný kandidát zo zoznamu HTTP proxy môže poskytnúť adresu pre tento test verejnej stránky. Použite jeho skutočnú schému a port a overte, či povoľuje tunel HTTPS.
Cieľ HTTPS môže používať proxy HTTP. libcurl spravuje tunel pre tento prenos HTTPS. http:// v voľbe proxy opisuje spojenie so sprostredkovateľom. Zmeňte ho na https:// iba pre koncový bod proxy, ktorý skutočne prijíma TLS, a zostavenie libcurl, ktoré to podporuje.
Urobte efektívnu trasu zámernou
Explicitná voľba proxy prepisuje zodpovedajúce nastavenie prostredia proxy. Obchádzanie je samostatné rozhodnutie: zdedený no_proxy môže cieľ stále vylúčiť. Ak musí tento handle používať zvolenú proxy pre každý cieľ, ktorý dostane, nakonfigurujte CURLOPT_NOPROXY ako prázdny reťazec v rámci tejto politiky.
Naopak, nastavenie CURLOPT_PROXY na prázdny reťazec používanie proxy výslovne vypne. Nastavenie na NULL odstráni explicitné priradenie a znova povolí správanie založené na prostredí. Tieto dve hodnoty slúžia rôznym účelom.
Hlavička špecifická pre cieľ, ako Content-Type: text/xml, nevyberá proxy. Pridajte ju iba vtedy, keď skutočné telo požiadavky a API cieľa potrebujú tento typ média.
Prečítajte si aj výsledok HTTP
Úspešný curl_easy_perform neznamená, že webová stránka vrátila úspešný stav HTTP. Prečítajte CURLINFO_RESPONSE_CODE a použite spracovanie stavov aplikácie. Odpoveď CONNECT proxy má svoju vlastnú hodnotu, CURLINFO_HTTP_CONNECTCODE; odmietnutie tunela predchádza akejkoľvek odpovedi webovej stránky.
CURLOPT_FAILONERROR môže mnohé chyby HTTP považovať za zlyhania, ale jeho dokumentácia uvádza výnimky overovania. Držte výzvu 407 proxy oddelene od stavu cieľa.