libcurl pripne konfiguracijo proxyja na easy handle, ki izvede prenos. Nastavite naslov posrednika na tem handle, pri čemer CURLOPT_URL ostane URL cilja.

Naslednji fragment predpostavlja, da je libcurl inicializiran in da je handle veljaven 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));

Ohranjajte medpomnilnik napak živ, dokler se handle nanj sklicuje. Preden zapustite njegovo območje, počistite handle ali zamenjajte ali izbrišite njegov kazalnik CURLOPT_ERRORBUFFER. Ime gostitelja proxyja je nadomestni znak; neoverjen kandidat s seznama proxyjev HTTP lahko zagotovi naslov za ta test javnega spletnega mesta. Uporabite njegovo dejansko shemo in vrata ter preverite, ali dovoljuje tunel HTTPS.

Cilj HTTPS lahko uporablja proxy HTTP. libcurl upravlja tunel za ta prenos HTTPS. http:// v možnosti proxyja opisuje povezavo s posrednikom. Spremenite ga v https:// le za končno točko proxyja, ki dejansko sprejema TLS, in različico libcurl, ki to podpira.

Naredite učinkovito pot zavestno

Izrecna možnost proxyja preglasi ustrezno nastavitev okolja proxyja. Obhod je ločena odločitev: podedovani no_proxy lahko cilj še vedno izključi. Če mora ta handle uporabljati izbrani proxy za vsak cilj, ki ga prejme, konfigurirajte CURLOPT_NOPROXY kot prazen niz v okviru te politike.

Nasprotno, nastavitev CURLOPT_PROXY na prazen niz izrecno onemogoči uporabo proxyja. Nastavitev na NULL odstrani izrecno dodelitev in znova dovoli vedenje, ki temelji na okolju. Ti dve vrednosti služita različnim namenom.

Glava, specifična za cilj, kot je Content-Type: text/xml, ne izbere proxyja. Dodajte jo le, ko dejansko telo zahteve in API cilja potrebujeta to vrsto medija.

Preberite tudi rezultat HTTP

Uspešen curl_easy_perform ne pomeni, da je spletno mesto vrnilo uspešno stanje HTTP. Preberite CURLINFO_RESPONSE_CODE in uporabite obravnavo stanja aplikacije. Odgovor CONNECT proxyja ima svojo vrednost, CURLINFO_HTTP_CONNECTCODE; zavrnitev tunela je pred vsakim odgovorom spletnega mesta.

CURLOPT_FAILONERROR lahko obravnava številne napake HTTP kot neuspehe, vendar njegova dokumentacija navaja izjeme pri preverjanju pristnosti. Izziv 407 proxyja hranite ločeno od stanja cilja.

Sorodni članki