Setarea unui proxy explicit pe un easy handle libcurl
Configurați un easy handle libcurl pentru un anumit proxy și separați erorile de opțiune, eșecurile de transfer și starea HTTP.
libcurl atașează configurația proxy la easy handle-ul care efectuează transferul. Setați adresa intermediarului pe acel handle, lăsând CURLOPT_URL ca URL de destinație.
Fragmentul următor presupune că libcurl a fost inițializat și că handle este un easy handle valid:
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));
Mențineți în viață bufferul de erori cât timp handle-ul face referire la el. Înainte de a-i părăsi domeniul, curățați handle-ul sau înlocuiți ori goliți pointerul CURLOPT_ERRORBUFFER. Numele de gazdă al proxy-ului este un substituent; un candidat neautentificat din lista de proxy-uri HTTP poate furniza adresa pentru acest test pe un site public. Folosiți schema și portul reale și verificați dacă permite tunelul HTTPS.
O destinație HTTPS poate folosi un proxy HTTP. libcurl gestionează tunelul pentru acel transfer HTTPS. http:// din opțiunea de proxy descrie conexiunea la intermediar. Schimbați-l în https:// numai pentru un endpoint de proxy care acceptă efectiv TLS și o compilare libcurl care îl acceptă.
Faceți ruta efectivă deliberată
O opțiune de proxy explicită suprascrie setarea de mediu proxy corespunzătoare. Ocolirea este o decizie separată: un no_proxy moștenit poate exclude în continuare destinația. Dacă acest handle trebuie să folosească proxy-ul ales pentru fiecare destinație care îi este dată, configurați CURLOPT_NOPROXY ca un șir gol ca parte a acelei politici.
Dimpotrivă, setarea CURLOPT_PROXY la un șir gol dezactivează explicit utilizarea proxy-ului. Setarea sa la NULL elimină atribuirea explicită și permite din nou comportamentul bazat pe mediu. Aceste două valori servesc scopuri diferite.
Un antet specific destinației, cum ar fi Content-Type: text/xml, nu selectează proxy-ul. Adăugați-l numai când corpul real al cererii și API-ul destinației necesită acel tip de mediu.
Citiți și rezultatul HTTP
Un curl_easy_perform reușit nu înseamnă că site-ul a returnat o stare HTTP reușită. Citiți CURLINFO_RESPONSE_CODE și aplicați gestionarea stărilor aplicației. Răspunsul CONNECT al proxy-ului are propria valoare, CURLINFO_HTTP_CONNECTCODE; respingerea tunelului precede orice răspuns al site-ului.
CURLOPT_FAILONERROR poate trata multe erori HTTP drept eșecuri, dar documentația sa menționează excepții de autentificare. Țineți provocarea 407 a proxy-ului separată de starea destinației.