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.

Relaterede artikler