libcurl easy handle'iga aniq proxy o'rnatish
libcurl easy handle'ini muayyan proxy uchun sozlang va opsiya xatolari, uzatish muvaffaqiyatsizliklari hamda HTTP holatini ajrating.
libcurl proxy konfiguratsiyasini uzatishni bajaruvchi easy handle'ga biriktiradi. Vositachining manzilini o'sha handle'ga o'rnating, CURLOPT_URL esa maqsad URL bo'lib qolsin.
Quyidagi parcha libcurl ishga tushirilgan va handle haqiqiy easy handle deb hisoblaydi:
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 unga murojaat qilib turgan davomida xato buferini tirik saqlang. Uning doirasidan chiqishdan oldin handle'ni tozalang yoki uning CURLOPT_ERRORBUFFER ko'rsatkichini almashtiring yoki tozalang. Proxy xost nomi to'ldiruvchi; HTTP proxy ro'yxatidan autentifikatsiya qilinmagan nomzod ushbu ochiq sayt sinovi uchun manzil bera oladi. Uning haqiqiy sxemasi va portidan foydalaning, HTTPS tunneliga ruxsat berishini tekshiring.
HTTPS manzil HTTP proxydan foydalanishi mumkin. libcurl o'sha HTTPS uzatish uchun tunnelni boshqaradi. Proxy opsiyasidagi http:// vositachi bilan aloqani tavsiflaydi. Uni https:// ga faqat TLSni haqiqatan qabul qiladigan proxy oxirgi nuqtasi va buni qo'llab-quvvatlaydigan libcurl build uchun o'zgartiring.
Samarali marshrutni ongli qiling
Aniq proxy opsiyasi tegishli proxy muhit sozlamasini bekor qiladi. Chetlab o'tish alohida qaror: meros qolgan no_proxy maqsadni baribir istisno qilishi mumkin. Agar bu handle o'ziga berilgan har bir maqsad uchun tanlangan proxydan foydalanishi kerak bo'lsa, o'sha siyosatning bir qismi sifatida CURLOPT_NOPROXY ni bo'sh satr qilib sozlang.
Aksincha, CURLOPT_PROXY ni bo'sh satrga o'rnatish proxy ishlatilishini aniq o'chiradi. Uni NULL ga o'rnatish aniq tayinlashni olib tashlaydi va muhitga asoslangan xatti-harakatga yana ruxsat beradi. Bu ikki qiymat turli maqsadlarga xizmat qiladi.
Content-Type: text/xml kabi maqsadga xos sarlavha proxyni tanlamaydi. Uni faqat haqiqiy so'rov tanasi va maqsad API o'sha media turiga muhtoj bo'lganda qo'shing.
HTTP natijasini ham o'qing
Muvaffaqiyatli curl_easy_perform veb-sayt muvaffaqiyatli HTTP holatini qaytardi degani emas. CURLINFO_RESPONSE_CODE ni o'qing va ilovaning holat bilan ishlashini qo'llang. Proxyning CONNECT javobi o'z qiymatiga ega, CURLINFO_HTTP_CONNECTCODE; tunnel rad etilishi har qanday veb-sayt javobidan oldin sodir bo'ladi.
CURLOPT_FAILONERROR ko'plab HTTP xatolarini muvaffaqiyatsizlik deb qarashi mumkin, ammo uning hujjatlari autentifikatsiya istisnolarini qayd etadi. Proxyning 407 chaqirig'ini maqsad holatidan alohida saqlang.