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.

Ähnliche Artikel