Прызначэнне явнага проксі для easy handle libcurl
Наладзьце easy handle libcurl для пэўнага проксі і аддзяляйце памылкі опцый, збоі перадачы і 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 проксі асобна ад статусу прызначэння.