Nastavení explicitní proxy na easy handle libcurl
Nakonfigurujte easy handle libcurl pro konkrétní proxy a oddělte chyby voleb, selhání přenosu a stav HTTP.
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.