Postavljanje eksplicitnog proxyja na libcurl easy handle
Konfigurirajte libcurl easy handle za određeni proxy i odvojite greške opcija, neuspjehe prijenosa i HTTP status.
libcurl pridružuje konfiguraciju proxyja easy handleu koji obavlja prijenos. 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 međuspremnik pogrešaka živim dok se handle na njega poziva. Prije napuštanja njegova opsega očistite handle ili zamijenite, odnosno obrišite njegov pokazivač CURLOPT_ERRORBUFFER. Naziv hosta proxyja je rezervirano mjesto; neautentificirani kandidat s popisa HTTP proxyja može osigurati adresu za ovaj test javne stranice. Upotrijebite njegovu stvarnu shemu i port te provjerite dopušta li tunel HTTPS.
Odredište HTTPS može koristiti HTTP proxy. libcurl upravlja tunelom za taj HTTPS prijenos. http:// u opciji proxyja opisuje vezu s posrednikom. Promijenite ga u https:// samo za proxy krajnju točku koja stvarno prihvaća 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 zasebna 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 upotrebu proxyja. Postavljanje na NULL uklanja eksplicitnu dodjelu i ponovno dopušta ponašanje temeljeno 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 pogreške tretirati kao neuspjehe, ali njegova dokumentacija ističe iznimke autentifikacije. Držite proxy izazov 407 odvojenim od statusa odredišta.