Բացահայտ պրոքսիի տեղադրում libcurl easy handle-ի վրա
Կարգավորեք libcurl easy handle-ը կոնկրետ պրոքսիի համար և առանձնացրեք ընտրանքի սխալները, փոխանցման ձախողումները և HTTP կարգավիճակը։
libcurl-ը պրոքսիի կարգավորումը կցում է այն easy handle-ին, որը կատարում է փոխանցումը։ Սահմանեք միջնորդի հասցեն այդ handle-ի վրա՝ թողնելով CURLOPT_URL որպես նպատակակետ URL։
Հետևյալ հատվածը ենթադրում է, որ libcurl-ը սկզբնավորված է, և handle վավեր 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));
Պահեք սխալների բուֆերը կենդանի, քանի դեռ handle-ը հղում է դրան։ Նրա շրջանակից դուրս գալուց առաջ մաքրեք handle-ը կամ փոխարինեք կամ ջնջեք նրա CURLOPT_ERRORBUFFER ցուցիչը։ Պրոքսիի հոսթի անունը տեղապահ է. HTTP պրոքսիների ցանկից չհաստատված թեկնածուն կարող է տրամադրել հասցեն այս հանրային կայքի փորձարկման համար։ Օգտագործեք նրա իրական սխեման և պորտը, և ստուգեք՝ արդյոք այն թույլ է տալիս HTTPS թունելը։
HTTPS նպատակակետը կարող է օգտագործել HTTP պրոքսի։ libcurl-ը կառավարում է թունելը այդ HTTPS փոխանցման համար։ Պրոքսիի ընտրանքի http://-ը նկարագրում է կապը միջնորդի հետ։ Փոխեք այն https://-ի միայն այն պրոքսի վերջնակետի համար, որն իսկապես ընդունում է TLS, և այն libcurl կառուցվածքի համար, որն աջակցում է դրան։
Դարձրեք արդյունավետ երթուղին դիտավորյալ
Բացահայտ պրոքսիի ընտրանքը վերացնում է համապատասխան պրոքսի միջավայրի կարգավորումը։ Շրջանցումը առանձին որոշում է. ժառանգված no_proxy-ը դեռ կարող է բացառել նպատակակետը։ Եթե այս handle-ը պետք է օգտագործի ընտրված պրոքսին իրեն տրված յուրաքանչյուր նպատակակետի համար, կարգավորեք CURLOPT_NOPROXY-ը որպես դատարկ տող այդ քաղաքականության մասում։
Ընդհակառակը, CURLOPT_PROXY-ը դատարկ տողի սահմանելը բացահայտորեն անջատում է պրոքսիի օգտագործումը։ NULL-ի սահմանելը հեռացնում է բացահայտ վերագրումը և կրկին թույլ տալիս միջավայրի վրա հիմնված վարքագիծը։ Այս երկու արժեքները տարբեր նպատակների են ծառայում։
Թիրախային հատուկ վերնագիր, ինչպիսին Content-Type: text/xml-ն է, չի ընտրում պրոքսին։ Ավելացրեք այն միայն այն դեպքում, երբ իրական հարցման մարմինը և նպատակակետի API-ն կարիք ունեն այդ մեդիա տեսակի։
Կարդացեք նաև HTTP արդյունքը
Հաջող curl_easy_perform-ը չի նշանակում, որ կայքը վերադարձրել է հաջող HTTP կարգավիճակ։ Կարդացեք CURLINFO_RESPONSE_CODE-ը և կիրառեք հավելվածի կարգավիճակի մշակումը։ Պրոքսիի CONNECT պատասխանն ունի իր արժեքը՝ CURLINFO_HTTP_CONNECTCODE. թունելի մերժումը նախորդում է կայքի ցանկացած պատասխանի։
CURLOPT_FAILONERROR-ը կարող է շատ HTTP սխալներ դիտարկել որպես ձախողումներ, սակայն նրա փաստաթղթերը նշում են նույնականացման բացառություններ։ Պրոքսիի 407 մարտահրավերը առանձին պահեք նպատակակետի կարգավիճակից։