libcurl easy handle üzərində açıq proxy təyin etmək
libcurl easy handle-ı müəyyən proxy üçün konfiqurasiya edin və seçim xətalarını, ötürmə uğursuzluqlarını və HTTP statusunu ayırın.
libcurl proxy konfiqurasiyasını ötürməni yerinə yetirən easy handle-a bağlayır. Vasitəçinin ünvanını həmin handle-da təyin edin, CURLOPT_URL isə təyinat URL-i kimi qalsın.
Aşağıdakı fraqment libcurl-ün işə salındığını və handle-in etibarlı easy handle olduğunu fərz edir:
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));
Handle ona istinad etdiyi müddətdə xəta buferini canlı saxlayın. Sahəsini tərk etməzdən əvvəl handle-ı təmizləyin və ya CURLOPT_ERRORBUFFER göstəricisini dəyişdirin və ya təmizləyin. Proxy host adı yer tutucudur; HTTP proxy siyahısından autentifikasiyasız namizəd bu ictimai sayt testi üçün ünvanı verə bilər. Onun faktiki sxemini və portunu istifadə edin və HTTPS tunelinə icazə verdiyini yoxlayın.
HTTPS təyinatı HTTP proxy-dən istifadə edə bilər. libcurl həmin HTTPS ötürməsi üçün tuneli idarə edir. Proxy seçimindəki http:// vasitəçi ilə bağlantını təsvir edir. Onu https://-ə yalnız həqiqətən TLS qəbul edən proxy son nöqtəsi və bunu dəstəkləyən libcurl quruluşu üçün dəyişin.
Effektiv marşrutu qəsdən edin
Açıq proxy seçimi uyğun proxy mühit tənzimləməsini üstələyir. Yan keçmə ayrı qərardır: miras alınan no_proxy yenə də təyinatı istisna edə bilər. Əgər bu handle ona verilən hər təyinat üçün seçilmiş proxy-dən istifadə etməlidirsə, CURLOPT_NOPROXY-i həmin siyasətin bir hissəsi kimi boş sətir kimi konfiqurasiya edin.
Əksinə, CURLOPT_PROXY-i boş sətirə təyin etmək proxy istifadəsini açıq şəkildə söndürür. Onu NULL-a təyin etmək açıq təyinatı silir və mühitə əsaslanan davranışa yenidən icazə verir. Bu iki dəyər fərqli məqsədlərə xidmət edir.
Content-Type: text/xml kimi hədəfə xas başlıq proxy-ni seçmir. Onu yalnız faktiki sorğu gövdəsi və təyinat API-si həmin media növünə ehtiyac duyduqda əlavə edin.
HTTP nəticəsini də oxuyun
Uğurlu curl_easy_perform veb-saytın uğurlu HTTP statusu qaytardığı anlamına gəlmir. CURLINFO_RESPONSE_CODE-i oxuyun və tətbiqin status emalını tətbiq edin. Proxy-nin CONNECT cavabının öz dəyəri var, CURLINFO_HTTP_CONNECTCODE; tunelin rədd edilməsi hər hansı veb-sayt cavabından əvvəl gəlir.
CURLOPT_FAILONERROR bir çox HTTP xətasını uğursuzluq kimi qəbul edə bilər, lakin sənədləri autentifikasiya istisnalarını qeyd edir. Proxy-nin 407 çağırışını təyinatın statusundan ayrı saxlayın.