Paglalagay ng tahasang proxy sa isang libcurl easy handle
I-configure ang isang libcurl easy handle para sa partikular na proxy at paghiwalayin ang mga error sa opsyon, pagkabigo sa transfer at HTTP status.
Inilalakip ng libcurl ang configuration ng proxy sa easy handle na gumagawa ng transfer. Itakda ang address ng tagapamagitan sa handle na iyon, habang iniiwan ang CURLOPT_URL bilang URL ng destinasyon.
Ipinapalagay ng sumusunod na bahagi na nasimulan na ang libcurl at ang handle ay isang valid na 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));
Panatilihing buhay ang buffer ng error habang tinutukoy ito ng handle. Bago umalis sa saklaw nito, linisin ang handle o palitan o burahin ang pointer nitong CURLOPT_ERRORBUFFER. Ang hostname ng proxy ay isang placeholder; isang hindi na-authenticate na kandidato mula sa listahan ng HTTP proxy ang makapagbibigay ng address para sa pampublikong site na test na ito. Gamitin ang aktwal nitong scheme at port, at tingnan kung pinapayagan nito ang HTTPS tunnel.
Ang destinasyong HTTPS ay maaaring gumamit ng HTTP proxy. Pinangangasiwaan ng libcurl ang tunnel para sa HTTPS transfer na iyon. Inilalarawan ng http:// sa opsyon ng proxy ang koneksyon sa tagapamagitan. Palitan ito ng https:// para lamang sa proxy endpoint na tunay na tumatanggap ng TLS at sa build ng libcurl na sumusuporta rito.
Gawing sinasadya ang epektibong ruta
Ang tahasang opsyon ng proxy ay nangingibabaw sa katumbas na setting ng kapaligiran ng proxy. Ang pag-iwas ay isang hiwalay na desisyon: ang minanang no_proxy ay maaari pa ring ibukod ang destinasyon. Kung kailangang gamitin ng handle na ito ang piniling proxy para sa bawat destinasyong ibinibigay dito, i-configure ang CURLOPT_NOPROXY bilang walang laman na string bilang bahagi ng patakarang iyon.
Sa kabilang banda, ang pagtatakda ng CURLOPT_PROXY sa walang laman na string ay tahasang nagpapawalang-bisa sa paggamit ng proxy. Ang pagtatakda nito sa NULL ay nag-aalis ng tahasang pagtatalaga at muling pinapayagan ang pag-uugaling nakabatay sa kapaligiran. Ang dalawang halagang iyon ay nagsisilbi sa magkaibang layunin.
Ang header na partikular sa target gaya ng Content-Type: text/xml ay hindi pumipili ng proxy. Idagdag lamang ito kapag kailangan ng aktwal na katawan ng kahilingan at ng API ng destinasyon ang uri ng media na iyon.
Basahin din ang resulta ng HTTP
Ang matagumpay na curl_easy_perform ay hindi nangangahulugang nagbalik ang website ng matagumpay na HTTP status. Basahin ang CURLINFO_RESPONSE_CODE at ilapat ang paghawak ng status ng application. Ang CONNECT na tugon ng proxy ay may sariling halaga, CURLINFO_HTTP_CONNECTCODE; ang pagtanggi sa tunnel ay nauuna sa anumang tugon ng website.
Maaaring ituring ng CURLOPT_FAILONERROR ang maraming error sa HTTP bilang pagkabigo, ngunit binabanggit ng dokumentasyon nito ang mga pagbubukod sa authentication. Panatilihing hiwalay ang 407 challenge ng proxy sa status ng destinasyon.