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 на проксито отделно от статуса на дестинацията.

Подобни статии