Постављање експлицитног проксија на 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 build који то подржава.
Учините ефективну руту намерном
Експлицитна опција проксија надјачава одговарајућу поставку прокси окружења. Заобилажење је посебна одлука: наслеђени 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 проксија одвојеним од статуса одредишта.