Sette en eksplisitt proxy på et libcurl easy handle
Konfigurer et libcurl easy handle for en bestemt proxy, og skill valgfeil, overføringsfeil og HTTP-status.
libcurl knytter proxykonfigurasjonen til easy handle-en som utfører overføringen. Angi mellommannerens adresse på den handle-en, mens CURLOPT_URL forblir mål-URL-en.
Følgende utdrag forutsetter at libcurl er initialisert og at handle er en gyldig 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));
Hold feilbufferen i live så lenge handle-en refererer til den. Før du forlater dens omfang, rydd opp handle-en eller erstatt eller tøm CURLOPT_ERRORBUFFER-pekeren. Proxyens vertsnavn er en plassholder; en uautentisert kandidat fra HTTP-proxy-listen kan skaffe adressen for denne testen på et offentlig nettsted. Bruk dens faktiske scheme og port, og kontroller om den tillater HTTPS-tunnelen.
En HTTPS-destinasjon kan bruke en HTTP-proxy. libcurl håndterer tunnelen for den HTTPS-overføringen. http:// i proxyvalget beskriver forbindelsen til mellommannen. Endre det til https:// bare for et proxy-endepunkt som faktisk godtar TLS, og en libcurl-bygg som støtter det.
Gjør den effektive ruten bevisst
Et eksplisitt proxyvalg overstyrer den tilsvarende proxy-miljøinnstillingen. Omgåelse er en egen beslutning: en nedarvet no_proxy kan fortsatt utelukke destinasjonen. Hvis denne handle-en må bruke den valgte proxyen for hver destinasjon den får, konfigurer CURLOPT_NOPROXY som en tom streng som en del av den policyen.
Omvendt deaktiverer innstilling av CURLOPT_PROXY til en tom streng proxybruk eksplisitt. Innstilling til NULL fjerner den eksplisitte tildelingen og tillater igjen miljøbasert atferd. Disse to verdiene tjener ulike formål.
En målspesifikk header som Content-Type: text/xml velger ikke proxyen. Legg den bare til når den faktiske forespørselskroppen og destinasjonens API trenger den medietypen.
Les også HTTP-resultatet
En vellykket curl_easy_perform betyr ikke at nettstedet returnerte en vellykket HTTP-status. Les CURLINFO_RESPONSE_CODE og bruk applikasjonens statushåndtering. Proxyens CONNECT-svar har sin egen verdi, CURLINFO_HTTP_CONNECTCODE; en tunnelavvisning kommer før enhver nettstedrespons.
CURLOPT_FAILONERROR kan behandle mange HTTP-feil som feil, men dokumentasjonen fremhever autentiseringsunntak. Hold en proxys 407-utfordring atskilt fra destinasjonens status.