Posar un proxy explícit en un easy handle de libcurl
Configureu un easy handle de libcurl per a un proxy concret i separeu els errors d'opció, les fallades de transferència i l'estat HTTP.
libcurl adjunta la configuració del proxy a l'easy handle que fa la transferència. Establiu l'adreça de l'intermediari en aquest handle, deixant CURLOPT_URL com a URL de destinació.
El fragment següent assumeix que libcurl s'ha inicialitzat i que handle és un easy handle vàlid:
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));
Mantingueu viu el búfer d'errors mentre el handle hi faci referència. Abans de sortir del seu àmbit, netegeu el handle o substituïu o esborreu el seu punter CURLOPT_ERRORBUFFER. El nom d'amfitrió del proxy és un marcador de posició; un candidat no autenticat de la llista de proxys HTTP pot proporcionar l'adreça per a aquesta prova en un lloc públic. Utilitzeu el seu esquema i port reals, i comproveu si permet el túnel HTTPS.
Una destinació HTTPS pot utilitzar un proxy HTTP. libcurl gestiona el túnel per a aquesta transferència HTTPS. L'http:// de l'opció de proxy descriu la connexió amb l'intermediari. Canvieu-lo a https:// només per a un punt final de proxy que realment accepti TLS i una compilació de libcurl que ho admeti.
Feu que la ruta efectiva sigui deliberada
Una opció de proxy explícita substitueix la configuració d'entorn de proxy corresponent. L'omissió és una decisió a part: un no_proxy heretat encara pot excloure la destinació. Si aquest handle ha d'utilitzar el proxy seleccionat per a cada destinació que rebi, configureu CURLOPT_NOPROXY com una cadena buida dins d'aquesta política.
Al contrari, establir CURLOPT_PROXY en una cadena buida desactiva explícitament l'ús del proxy. Establir-lo en NULL elimina l'assignació explícita i torna a permetre el comportament basat en l'entorn. Aquests dos valors serveixen propòsits diferents.
Una capçalera específica de l'objectiu com Content-Type: text/xml no selecciona el proxy. Afegiu-la només quan el cos real de la sol·licitud i l'API de destinació necessitin aquest tipus de mitjà.
Llegiu també el resultat HTTP
Un curl_easy_perform correcte no significa que el lloc web hagi retornat un estat HTTP correcte. Llegiu CURLINFO_RESPONSE_CODE i apliqueu el tractament d'estats de l'aplicació. La resposta CONNECT del proxy té el seu propi valor, CURLINFO_HTTP_CONNECTCODE; un rebuig del túnel precedeix qualsevol resposta del lloc web.
CURLOPT_FAILONERROR pot tractar molts errors HTTP com a fallades, però la seva documentació esmenta excepcions d'autenticació. Mantingueu el repte 407 del proxy separat de l'estat de la destinació.