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