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.

Povezani članci