libcurl připojuje konfiguraci proxy k easy handle, který provádí přenos. Nastavte adresu zprostředkovatele na tomto handle, přičemž CURLOPT_URL ponechte jako URL cíle.

Následující fragment předpokládá, že libcurl je inicializován 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ý, dokud na něj handle odkazuje. Před opuštěním jeho rozsahu handle vyčistěte nebo nahraďte či vymažte jeho ukazatel CURLOPT_ERRORBUFFER. Název hostitele proxy je zástupný symbol; neautentizovaný kandidát ze seznamu HTTP proxy může poskytnout adresu pro tento test veřejného webu. Použijte jeho skutečné schéma a port a ověřte, zda povoluje tunel HTTPS.

Cíl HTTPS může používat proxy HTTP. libcurl spravuje tunel pro tento přenos HTTPS. http:// v volbě proxy popisuje spojení se zprostředkovatelem. Změňte jej na https:// pouze pro koncový bod proxy, který skutečně přijímá TLS, a sestavení libcurl, které to podporuje.

Udělejte efektivní trasu záměrnou

Explicitní volba proxy přebíjí odpovídající nastavení prostředí proxy. Obcházení je samostatné rozhodnutí: zděděný no_proxy může cíl stále vyloučit. Pokud musí tento handle používat zvolenou proxy pro každý cíl, který dostane, nakonfigurujte CURLOPT_NOPROXY jako prázdný řetězec v rámci této politiky.

Naopak nastavení CURLOPT_PROXY na prázdný řetězec použití proxy výslovně zakáže. Nastavení na NULL odstraní explicitní přiřazení a znovu umožní chování založené na prostředí. Tyto dvě hodnoty slouží různým účelům.

Záhlaví specifické pro cíl, jako Content-Type: text/xml, proxy nevybírá. Přidejte jej pouze tehdy, když skutečné tělo požadavku a API cíle tento typ média potřebují.

Přečtěte si také výsledek HTTP

Úspěšný curl_easy_perform neznamená, že web vrátil úspěšný stav HTTP. Přečtěte CURLINFO_RESPONSE_CODE a použijte zpracování stavů aplikace. Odpověď CONNECT proxy má vlastní hodnotu, CURLINFO_HTTP_CONNECTCODE; odmítnutí tunelu předchází jakékoli odpovědi webu.

CURLOPT_FAILONERROR může mnoho chyb HTTP považovat za selhání, ale jeho dokumentace uvádí výjimky ověřování. Držte výzvu 407 proxy odděleně od stavu cíle.

Související články