Aiškaus proxy nustatymas libcurl easy handle
Sukonfigūruokite libcurl easy handle konkrečiam proxy ir atskirkite parinkčių klaidas, perdavimo triktis ir HTTP būseną.
libcurl priskiria proxy konfigūraciją tam easy handle, kuris atlieka perdavimą. Nustatykite tarpininko adresą tame handle, palikdami CURLOPT_URL kaip paskirties URL.
Toliau pateiktas fragmentas daro prielaidą, kad libcurl inicijuotas ir handle yra tinkamas 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));
Laikykite klaidų buferį gyvą, kol handle į jį nurodo. Prieš palikdami jo apimtį, išvalykite handle arba pakeiskite, arba išvalykite jo CURLOPT_ERRORBUFFER rodyklę. Proxy pagrindinio kompiuterio vardas yra vietos žymė; neautentifikuotas kandidatas iš HTTP proxy sąrašo gali suteikti adresą šiam viešos svetainės testui. Naudokite jo tikrąją schemą ir prievadą bei patikrinkite, ar jis leidžia HTTPS tunelį.
HTTPS paskirtis gali naudoti HTTP proxy. libcurl tvarko to HTTPS perdavimo tunelį. http:// proxy parinktyje aprašo ryšį su tarpininku. Pakeiskite jį į https:// tik proxy galiniam taškui, kuris iš tikrųjų priima TLS, ir libcurl build'ui, kuris tai palaiko.
Padarykite efektyvų maršrutą sąmoningą
Aiški proxy parinktis nepaiso atitinkamo proxy aplinkos nustatymo. Aplenkimas yra atskiras sprendimas: paveldėtas no_proxy vis tiek gali išskirti paskirtį. Jei šis handle turi naudoti pasirinktą proxy kiekvienai jam duotai paskirčiai, sukonfigūruokite CURLOPT_NOPROXY kaip tuščią eilutę pagal tą politiką.
Priešingai, CURLOPT_PROXY nustatymas į tuščią eilutę aiškiai išjungia proxy naudojimą. Nustatymas į NULL pašalina aiškų priskyrimą ir vėl leidžia aplinka pagrįstą elgseną. Šios dvi reikšmės tarnauja skirtingiems tikslams.
Konkrečiai paskirčiai skirtas antraštės laukas, pavyzdžiui, Content-Type: text/xml, nepasirenka proxy. Pridėkite jį tik tada, kai tikrasis užklausos turinys ir paskirties API reikalauja to medijos tipo.
Perskaitykite ir HTTP rezultatą
Sėkmingas curl_easy_perform nereiškia, kad svetainė grąžino sėkmingą HTTP būseną. Perskaitykite CURLINFO_RESPONSE_CODE ir pritaikykite programos būsenos apdorojimą. Proxy CONNECT atsakymas turi savo reikšmę, CURLINFO_HTTP_CONNECTCODE; tunelio atmetimas įvyksta prieš bet kurį svetainės atsakymą.
CURLOPT_FAILONERROR gali daugelį HTTP klaidų laikyti nesėkmėmis, tačiau jo dokumentacija nurodo autentifikavimo išimtis. Laikykite proxy 407 iššūkį atskirai nuo paskirties būsenos.