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 проксі асобна ад статусу прызначэння.

Падобныя артыкулы