libcurl koppelt de proxyconfiguratie aan de easy handle die de overdracht uitvoert. Stel het adres van de tussenpersoon op die handle in, terwijl CURLOPT_URL de bestemmings-URL blijft.

Het volgende fragment gaat ervan uit dat libcurl is geïnitialiseerd en dat handle een geldige easy handle is:

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));

Houd de foutbuffer in leven zolang de handle ernaar verwijst. Voordat u het bereik verlaat, ruimt u de handle op of vervangt of wist u de bijbehorende CURLOPT_ERRORBUFFER-pointer. De proxynaam van de host is een plaatsaanduiding; een niet-geauthenticeerde kandidaat uit de HTTP-proxylijst kan het adres voor deze test op een openbare site leveren. Gebruik het werkelijke schema en de poort ervan, en controleer of de HTTPS-tunnel wordt toegestaan.

Een HTTPS-bestemming kan een HTTP-proxy gebruiken. libcurl verzorgt de tunnel voor die HTTPS-overdracht. De http:// in de proxyoptie beschrijft de verbinding met de tussenpersoon. Wijzig dit alleen in https:// voor een proxy-eindpunt dat daadwerkelijk TLS accepteert en een libcurl-build die dit ondersteunt.

Maak de effectieve route bewust

Een expliciete proxyoptie overschrijft de overeenkomstige proxy-omgevingsinstelling. Omzeilen is een aparte beslissing: een geërfde no_proxy kan de bestemming alsnog uitsluiten. Als deze handle de gekozen proxy moet gebruiken voor elke bestemming die hij krijgt, configureert u CURLOPT_NOPROXY als een lege tekenreeks als onderdeel van dat beleid.

Omgekeerd schakelt het instellen van CURLOPT_PROXY op een lege tekenreeks proxygebruik expliciet uit. Instellen op NULL verwijdert de expliciete toewijzing en staat omgevingsgedrag weer toe. Die twee waarden dienen verschillende doelen.

Een doelspecifieke header zoals Content-Type: text/xml selecteert de proxy niet. Voeg deze alleen toe wanneer de werkelijke aanvraagbody en de API van de bestemming dat mediatype nodig hebben.

Lees ook het HTTP-resultaat

Een geslaagde curl_easy_perform betekent niet dat de website een geslaagde HTTP-status heeft geretourneerd. Lees CURLINFO_RESPONSE_CODE en pas de statusafhandeling van de toepassing toe. Het CONNECT-antwoord van de proxy heeft zijn eigen waarde, CURLINFO_HTTP_CONNECTCODE; een tunnelweigering gaat aan elke website-respons vooraf.

CURLOPT_FAILONERROR kan veel HTTP-fouten als mislukkingen behandelen, maar de documentatie wijst op authenticatie-uitzonderingen. Houd de 407-uitdaging van een proxy gescheiden van de status van de bestemming.

Gerelateerde artikelen