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.

Súvisiace články