Einen expliziten Proxy an ein libcurl-Easy-Handle hängen
Konfigurieren Sie ein libcurl-Easy-Handle für einen bestimmten Proxy und trennen Sie Optionsfehler, Übertragungsfehler und HTTP-Status.
libcurl hängt die Proxy-Konfiguration an das Easy-Handle, das die Übertragung durchführt. Setzen Sie die Adresse des Vermittlers auf diesem Handle, während CURLOPT_URL die Ziel-URL bleibt.
Das folgende Fragment setzt voraus, dass libcurl initialisiert wurde und handle ein gültiges Easy-Handle ist:
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));
Halten Sie den Fehlerpuffer am Leben, solange das Handle darauf verweist. Bevor Sie seinen Bereich verlassen, räumen Sie das Handle auf oder ersetzen bzw. löschen Sie seinen CURLOPT_ERRORBUFFER-Zeiger. Der Proxy-Hostname ist ein Platzhalter; ein nicht authentifizierter Kandidat aus der HTTP-Proxy-Liste kann die Adresse für diesen Test an einer öffentlichen Website liefern. Verwenden Sie dessen tatsächliches Schema und dessen Port und prüfen Sie, ob er den HTTPS-Tunnel zulässt.
Ein HTTPS-Ziel kann einen HTTP-Proxy verwenden. libcurl übernimmt den Tunnel für diese HTTPS-Übertragung. Das http:// in der Proxy-Option beschreibt die Verbindung zum Vermittler. Ändern Sie es nur dann in https://, wenn ein Proxy-Endpunkt tatsächlich TLS akzeptiert und ein libcurl-Build dies unterstützt.
Machen Sie die effektive Route bewusst
Eine explizite Proxy-Option überschreibt die entsprechende Proxy-Umgebungseinstellung. Die Umgehung ist eine separate Entscheidung: Ein geerbtes no_proxy kann das Ziel weiterhin ausschließen. Wenn dieses Handle den ausgewählten Proxy für jedes ihm gegebene Ziel verwenden muss, konfigurieren Sie CURLOPT_NOPROXY als leere Zeichenkette im Rahmen dieser Richtlinie.
Umgekehrt deaktiviert das Setzen von CURLOPT_PROXY auf eine leere Zeichenkette die Proxy-Nutzung ausdrücklich. Das Setzen auf NULL entfernt die explizite Zuweisung und erlaubt wieder umgebungsbasiertes Verhalten. Diese beiden Werte dienen unterschiedlichen Zwecken.
Ein zielspezifischer Header wie Content-Type: text/xml wählt den Proxy nicht aus. Fügen Sie ihn nur hinzu, wenn der tatsächliche Anforderungstext und die Ziel-API diesen Medientyp benötigen.
Lesen Sie auch das HTTP-Ergebnis
Ein erfolgreiches curl_easy_perform bedeutet nicht, dass die Website einen erfolgreichen HTTP-Status zurückgegeben hat. Lesen Sie CURLINFO_RESPONSE_CODE und wenden Sie die Statusbehandlung der Anwendung an. Die CONNECT-Antwort des Proxys hat ihren eigenen Wert, CURLINFO_HTTP_CONNECTCODE; eine Tunnelablehnung geht jeder Antwort der Website voraus.
CURLOPT_FAILONERROR kann viele HTTP-Fehler als Fehlschläge behandeln, doch seine Dokumentation nennt Authentifizierungsausnahmen. Halten Sie die 407-Herausforderung eines Proxys vom Status des Ziels getrennt.