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.

Articole similare