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