Impostare un proxy esplicito su un easy handle libcurl
Configurate un easy handle libcurl per un proxy specifico e separate errori di opzione, errori di trasferimento e stato HTTP.
libcurl associa la configurazione del proxy all'easy handle che esegue il trasferimento. Impostate l'indirizzo dell'intermediario su quel handle, lasciando CURLOPT_URL come URL di destinazione.
Il frammento seguente presuppone che libcurl sia inizializzato e che handle sia un easy handle valido:
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));
Mantenete vivo il buffer degli errori finché l'handle vi fa riferimento. Prima di uscire dal suo ambito, ripulite l'handle oppure sostituite o cancellate il suo puntatore CURLOPT_ERRORBUFFER. Il nome host del proxy è un segnaposto; un candidato non autenticato dalla lista di proxy HTTP può fornire l'indirizzo per questo test su un sito pubblico. Usate il suo schema e la sua porta reali e verificate se consente il tunnel HTTPS.
Una destinazione HTTPS può usare un proxy HTTP. libcurl gestisce il tunnel per quel trasferimento HTTPS. Il http:// nell'opzione proxy descrive la connessione all'intermediario. Cambiatelo in https:// solo per un endpoint proxy che accetta davvero TLS e per una build di libcurl che lo supporta.
Rendete deliberato il percorso effettivo
Un'opzione proxy esplicita sostituisce la corrispondente impostazione dell'ambiente proxy. L'esclusione è una decisione separata: un no_proxy ereditato può comunque escludere la destinazione. Se questo handle deve usare il proxy scelto per ogni destinazione che riceve, configurate CURLOPT_NOPROXY come stringa vuota nell'ambito di quella politica.
Al contrario, impostare CURLOPT_PROXY su una stringa vuota disabilita esplicitamente l'uso del proxy. Impostarlo su NULL rimuove l'assegnazione esplicita e consente di nuovo il comportamento basato sull'ambiente. Questi due valori servono scopi diversi.
Un'intestazione specifica della destinazione come Content-Type: text/xml non seleziona il proxy. Aggiungetela solo quando il corpo effettivo della richiesta e l'API di destinazione richiedono quel tipo di media.
Leggete anche il risultato HTTP
Un curl_easy_perform riuscito non significa che il sito abbia restituito uno stato HTTP riuscito. Leggete CURLINFO_RESPONSE_CODE e applicate la gestione degli stati dell'applicazione. La risposta CONNECT del proxy ha un valore proprio, CURLINFO_HTTP_CONNECTCODE; un rifiuto del tunnel precede qualsiasi risposta del sito.
CURLOPT_FAILONERROR può trattare molti errori HTTP come errori, ma la sua documentazione segnala eccezioni di autenticazione. Tenete la sfida 407 del proxy separata dallo stato della destinazione.