Postavljanje eksplicitnog proxyja na libcurl easy handle
Konfigurirajte libcurl easy handle za određeni proxy i odvojite greške opcija, neuspehe prenosa i HTTP status.
libcurl pridružuje konfiguraciju proxyja easy handleu koji obavlja prenos. Postavite adresu posrednika na taj handle, ostavljajući CURLOPT_URL kao URL odredišta.
Sljedeći ulomak pretpostavlja da je libcurl inicijaliziran i da je handle valjan easy handle:
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));
Držite bafer grešaka živim dok se handle na njega poziva. Prije napuštanja njegovog opsega očistite handle ili zamijenite, odnosno obrišite njegov pokazivač CURLOPT_ERRORBUFFER. Naziv hosta proxyja je rezervirano mjesto; neautentificirani kandidat sa liste HTTP proxyja može obezbijediti adresu za ovaj test javne stranice. Koristite njegovu stvarnu šemu i port te provjerite da li dozvoljava tunel HTTPS.
Odredište HTTPS može koristiti HTTP proxy. libcurl upravlja tunelom za taj HTTPS prenos. http:// u opciji proxyja opisuje vezu s posrednikom. Promijenite ga u https:// samo za proxy krajnju tačku koja stvarno prihvata TLS i libcurl build koji to podržava.
Učinite efektivnu rutu namjernom
Eksplicitna opcija proxyja nadjačava odgovarajuću postavku proxy okruženja. Zaobilaženje je posebna odluka: naslijeđeni no_proxy još uvijek može isključiti odredište. Ako ovaj handle mora koristiti odabrani proxy za svako odredište koje dobije, konfigurirajte CURLOPT_NOPROXY kao prazan niz u sklopu te politike.
Nasuprot tome, postavljanje CURLOPT_PROXY na prazan niz izričito onemogućuje korištenje proxyja. Postavljanje na NULL uklanja eksplicitnu dodjelu i ponovo dozvoljava ponašanje zasnovano na okruženju. Te dvije vrijednosti služe različitim svrhama.
Zaglavlje specifično za cilj, poput Content-Type: text/xml, ne odabire proxy. Dodajte ga samo kada stvarno tijelo zahtjeva i API odredišta trebaju tu vrstu medija.
Pročitajte i HTTP rezultat
Uspješan curl_easy_perform ne znači da je web stranica vratila uspješan HTTP status. Pročitajte CURLINFO_RESPONSE_CODE i primijenite rukovanje statusom aplikacije. Odgovor CONNECT proxyja ima vlastitu vrijednost, CURLINFO_HTTP_CONNECTCODE; odbijanje tunela prethodi svakom odgovoru web stranice.
CURLOPT_FAILONERROR može mnoge HTTP greške tretirati kao neusjehe, ali njegova dokumentacija ističe izuzetke autentifikacije. Držite proxy izazov 407 odvojenim od statusa odredišta.