Ustawianie jawnego proxy na easy handle libcurl
Skonfiguruj easy handle libcurl dla konkretnego proxy i rozdziel błędy opcji, niepowodzenia transferu oraz status HTTP.
libcurl przypisuje konfigurację proxy do easy handle wykonującego transfer. Ustaw adres pośrednika na tym handle, pozostawiając CURLOPT_URL jako docelowy URL.
Poniższy fragment zakłada, że libcurl został zainicjalizowany, a handle jest prawidłowym 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));
Utrzymuj bufor błędów przy życiu, dopóki handle się do niego odwołuje. Przed opuszczeniem jego zakresu wyczyść handle albo zastąp lub wyczyść jego wskaźnik CURLOPT_ERRORBUFFER. Nazwa hosta proxy to placeholder; nieuwierzytelniony kandydat z listy proxy HTTP może dostarczyć adres do tego testu publicznej witryny. Użyj jego rzeczywistego schematu i portu oraz sprawdź, czy zezwala na tunel HTTPS.
Cel HTTPS może korzystać z proxy HTTP. libcurl obsługuje tunel dla tego transferu HTTPS. http:// w opcji proxy opisuje połączenie z pośrednikiem. Zmień go na https:// tylko dla punktu końcowego proxy, który rzeczywiście akceptuje TLS, i kompilacji libcurl, która to obsługuje.
Uczyń efektywną trasę świadomą
Jawna opcja proxy zastępuje odpowiednie ustawienie środowiska proxy. Omijanie to osobna decyzja: odziedziczony no_proxy nadal może wykluczyć cel. Jeśli ten handle musi używać wybranego proxy dla każdego otrzymanego celu, skonfiguruj CURLOPT_NOPROXY jako pusty ciąg w ramach tej polityki.
Odwrotnie, ustawienie CURLOPT_PROXY na pusty ciąg jawnie wyłącza korzystanie z proxy. Ustawienie go na NULL usuwa jawne przypisanie i ponownie pozwala na zachowanie oparte na środowisku. Te dwie wartości służą różnym celom.
Nagłówek specyficzny dla celu, taki jak Content-Type: text/xml, nie wybiera proxy. Dodaj go tylko wtedy, gdy rzeczywiste ciało żądania i API celu wymagają tego typu nośnika.
Odczytaj także wynik HTTP
Udane curl_easy_perform nie oznacza, że witryna zwróciła udany status HTTP. Odczytaj CURLINFO_RESPONSE_CODE i zastosuj obsługę statusu aplikacji. Odpowiedź CONNECT proxy ma własną wartość, CURLINFO_HTTP_CONNECTCODE; odrzucenie tunelu poprzedza każdą odpowiedź witryny.
CURLOPT_FAILONERROR może traktować wiele błędów HTTP jako niepowodzenia, ale jego dokumentacja wymienia wyjątki uwierzytelniania. Trzymaj wyzwanie 407 proxy oddzielnie od statusu celu.