Sæt en eksplicit proxy på et libcurl easy handle
Konfigurer et libcurl easy handle til en bestemt proxy, og adskil valgfejl, overførselsfejl og HTTP-status.
libcurl knytter proxykonfigurationen til det easy handle, der udfører overførslen. Angiv mellemmandens adresse på det handle, mens CURLOPT_URL efterlades som destinations-URL.
Følgende uddrag forudsætter, at libcurl er initialiseret, og at handle er et gyldigt 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 fejlbufferen i live, så længe handle'et refererer til den. Før du forlader dets område, skal du rydde op i handle'et eller erstatte eller rydde dets CURLOPT_ERRORBUFFER-pointer. Proxyens værtsnavn er en pladsholder; en uautentificeret kandidat fra HTTP-proxy-listen kan levere adressen til denne test af et offentligt websted. Brug dens faktiske scheme og port, og kontroller, om den tillader HTTPS-tunnelen.
En HTTPS-destination kan bruge en HTTP-proxy. libcurl håndterer tunnelen til den HTTPS-overførsel. http:// i proxyindstillingen beskriver forbindelsen til mellemmanden. Skift den til https:// kun for et proxyendepunkt, der faktisk accepterer TLS, og en libcurl-build, der understøtter det.
Gør den effektive rute bevidst
En eksplicit proxyindstilling tilsidesætter den tilsvarende proxy-miljøindstilling. Omgåelse er en separat beslutning: en nedarvet no_proxy kan stadig udelukke destinationen. Hvis dette handle skal bruge den valgte proxy for hver destination, det får, skal du konfigurere CURLOPT_NOPROXY som en tom streng som en del af den politik.
Omvendt deaktiverer indstilling af CURLOPT_PROXY til en tom streng eksplicit proxybrug. Indstilling til NULL fjerner den eksplicitte tildeling og tillader igen miljøbaseret adfærd. De to værdier tjener forskellige formål.
En målrettet header som Content-Type: text/xml vælger ikke proxyen. Tilføj den kun, når den faktiske anmodningstekst og destinationens API har brug for den medietype.
Læs også HTTP-resultatet
Et vellykket curl_easy_perform betyder ikke, at webstedet returnerede en vellykket HTTP-status. Læs CURLINFO_RESPONSE_CODE, og anvend applikationens statushåndtering. Proxyens CONNECT-svar har sin egen værdi, CURLINFO_HTTP_CONNECTCODE; en tunnelafvisning kommer før ethvert webstedssvar.
CURLOPT_FAILONERROR kan behandle mange HTTP-fejl som fejl, men dets dokumentation fremhæver autentificeringsundtagelser. Hold en proxys 407-udfordring adskilt fra destinationens status.