407 Proxy-Authentifizierung erforderlich: Jede Ursache und wie man sie behebt

HTTP 407 hat genau eine Bedeutung: Der Proxy vor Ihnen hat Ihre Anmeldedaten abgelehnt. Diese eine Tatsache eliminiert die meisten falschen Wege — hier ist der Rest der Karte.

HTTP 407 Proxy-Authentifizierung erforderlich hat genau eine Bedeutung, und sie ist enger als die meisten Leute annehmen: Ein Proxy zwischen Ihnen und dem Internet hat die Anfrage abgelehnt, weil ihm gültige Anmeldedaten für den Proxy selbst fehlen. Die Zielwebsite wurde nie kontaktiert. Sie hat Ihre Anfrage nie gesehen, keine Entscheidung getroffen und kann nicht die Ursache sein. Das Beheben eines 407 bedeutet daher immer, Ihre Proxy-Konfiguration zu korrigieren — und die Liste der möglichen Fehler ist kurz und vollständig aufzählbar. Dieser Leitfaden geht die gesamte Liste durch, mit den werkzeugspezifischen Korrekturen, die die meisten Menschen stolpern lassen.

Lesen Sie zuerst den Proxy-Authenticate-Header

Gemäß der HTTP-Spezifikation (RFC 9110) muss ein 407 von einem Proxy-Authenticate-Header begleitet werden, der beschreibt, wie authentifiziert werden soll — typischerweise etwas wie Proxy-Authenticate: Basic realm="Access to internal site". Ihr Client soll dann die Anfrage mit einem Proxy-Authorization-Header wiederholen. Diese Paarung ist es wert, sich zu merken, denn sie unterscheidet 407 von seinem Nachbarn: ein 401 kommt vom Ursprungsserver und paart WWW-Authenticate mit Authorization, während 407 von einem Vermittler kommt und die Proxy- präfixierten Versionen verwendet. Wenn Sie auf einen WWW-Authenticate-Header starren, debuggen Sie den falschen Hop.

# See exactly which hop is refusing you, and what scheme it wants
curl -v -x http://USER:PASS@gate.quantumproxies.io:8000 https://httpbin.org/ip

# Response you are looking for on failure:
#   HTTP/1.1 407 Proxy Authentication Required
#   Proxy-Authenticate: Basic realm="..."
#
# Response you want on success: your exit IP, not your own
#   {"origin": "203.0.113.45"}

Wenn curl -x mit Anmeldedaten Ihre Exit-IP zurückgibt, sind der Proxy und die Anmeldedaten beide in Ordnung — und jeder 407, den Sie noch in einer Anwendung sehen, ist die eigene Konfiguration dieser Anwendung, nicht die des Proxys. Dieser einzelne Test teilt das Problem in etwa zehn Sekunden.

Ursache 1: Die Anmeldedaten fehlen, sind falsch oder am falschen Ort

Die häufigste Ursache ist auch die langweiligste. Anmeldedaten gehören in die Proxy-URL, vor dem Host, in der Form user:pass@host:port — und die Client-Bibliothek erstellt den Proxy-Authorization-Header daraus. Das Kopieren eines Endpunkts aus einem Dashboard ohne die Anmeldedaten oder das Einfügen Ihres Kontopassworts anstelle des Proxy-Passworts (sie sind normalerweise unterschiedlich) erzeugt einen sofortigen, dauerhaften 407 bei jeder Anfrage.

import requests

proxy = "http://USER:PASS@gate.quantumproxies.io:8000"
proxies = {"http": proxy, "https": proxy}

r = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=15)
print(r.status_code, r.json())   # 200 and the exit IP = auth is correct

Überprüfen Sie auch den Port. Anbieter stellen unterschiedliche Ports für rotierende und feste Endpunkte sowie für HTTP im Vergleich zu SOCKS5 bereit; den falschen mit gültigen Anmeldedaten zu treffen, kann immer noch 407 zurückgeben, weil dieser Listener ein anderes Identitätsformat erwartet. Wenn Sie sich nicht sicher sind, welches Protokoll Sie verwenden, erklärt unser Artikel über SOCKS5 versus HTTP-Proxys die Unterschiede.

Ursache 2: Sonderzeichen, die nie prozentkodiert wurden

Diese kostet Menschen ganze Nachmittage. Eine Proxy-URL ist eine URL, daher muss jedes reservierte Zeichen in Ihrem Benutzernamen oder Passwort prozentkodiert werden, sonst teilt der Parser die Zeichenkette an der falschen Stelle. Ein Passwort, das @ enthält, beendet den Userinfo-Abschnitt frühzeitig und Ihr Client versucht, sich mit einem nicht existierenden Host zu verbinden; ein : teilt den Benutzernamen vom Passwort an der falschen Stelle.

from urllib.parse import quote

user = quote("team@example.com", safe="")   # team%40example.com
pwd  = quote("p@ss:w#rd", safe="")          # p%40ss%3Aw%23rd

proxy = f"http://{user}:{pwd}@gate.quantumproxies.io:8000"
Checkliste zur Zuordnung von 407 Proxy-Authentifizierungsanforderungssymptomen zu ihren tatsächlichen Ursachen, einschließlich Tunnelversagen, Whitelist-Änderungen und Proxy-Einstellungen pro Tool
Gleicher Statuscode, sechs verschiedene Fehler. Stimmen Sie das Symptom auf der linken Seite ab, bevor Sie etwas ändern.

Ursache 3: Whitelist-Authentifizierung und eine IP, die sich geändert hat

Die meisten Anbieter unterstützen zwei Authentifizierungsmodi: Anmeldedaten in der URL oder IP-Whitelisting, bei dem Sie die öffentliche Adresse Ihres Servers im Dashboard autorisieren und überhaupt keine Anmeldedaten senden. QuantumProxies unterstützt beides. Der Fehlermodus ist spezifisch und sehr erkennbar: Alles funktionierte wochenlang, dann begann jede Anfrage ohne Codeänderung 407 zurückzugeben. Das ist Ihre öffentliche IP, die sich ändert — eine DHCP-Lease-Erneuerung im Büro, ein neues NAT-Gateway nach einer Cloud-Neubereitstellung, ein mobiles Tethering oder ein CI-Runner, der bei jedem Job eine neue Adresse erhält.

Bestätigen Sie das, bevor Sie etwas anderes debuggen: Holen Sie Ihre aktuelle öffentliche Adresse mit curl -sS https://api.ipify.org, vergleichen Sie sie mit der Whitelist und fügen Sie sie erneut hinzu, wenn sie abweicht. Wenn Ihre Ausgangs-IP nicht stabil ist — CI-Runner und Autoscaling-Gruppen sind es selten — wechseln Sie diese Umgebung zu user:pass-Authentifizierung, die mit der Konfiguration statt mit dem Netzwerk reist. Die andere Hälfte dieser Falle ist das Mischen von Modi: Einige Gateways lehnen Anmeldedaten an einem nur-Whitelist-Endpunkt ab, sodass das Senden beider fehlschlagen kann, wo das Senden keines erfolgreich ist.

Ursache 4: HTTPS geht durch einen CONNECT-Tunnel

Ein 407, der nur bei https://-URLs auftritt, oft als der Python-Fehler OSError: Tunnel connection failed: 407 Proxy Authentication Required, hat eine strukturelle Ursache. Normale HTTP-Anfragen werden vom Proxy weitergeleitet, aber HTTPS-Anfragen öffnen zuerst einen Tunnel mit einer CONNECT-Anfrage — und dieser CONNECT trägt seinen eigenen Proxy-Authorization-Header. Wenn Ihre Konfiguration nur einen HTTP-Proxy gesetzt hat oder Anmeldedaten auf einem Schema und nicht auf dem anderen gesetzt hat, wird der Tunnel anonym versucht und abgelehnt, bevor TLS überhaupt beginnt.

Die Regel ist einfach: Konfigurieren Sie immer beide Schemata mit denselben Anmeldedaten. In Python bedeutet das beide Schlüssel im proxies-Dict; in der Shell bedeutet es HTTP_PROXY und HTTPS_PROXY; in npm bedeutet es proxy und https-proxy. Beachten Sie, dass HTTPS_PROXY fast immer ein http://-Schema verwendet — das Schema beschreibt, wie Sie mit dem Proxy sprechen, nicht, was Sie durch ihn abrufen.

// Node 18+ with undici: one dispatcher covers http and https targets
import { ProxyAgent, fetch } from "undici";

const dispatcher = new ProxyAgent(
  "http://USER:PASS@gate.quantumproxies.io:8000"
);

const res = await fetch("https://httpbin.org/ip", { dispatcher });
console.log(res.status, await res.json());

Ursache 5: Das Tool hat seine eigene Proxy-Konfiguration

Umgebungsvariablen sind nicht universell. Viele Tools lesen ihre eigene Konfigurationsdatei und ignorieren die Shell vollständig, was den frustrierenden Zustand erzeugt, in dem curl funktioniert und Ihr Build nicht. Ein langwieriges GitHub Desktop-Problem ist die Lehrbuchillustration: Ein Entwickler hinter einem Unternehmensproxy hatte den Proxy in .gitconfig und in der Umgebung gesetzt, doch die Anmeldung schlug immer noch mit einem 407 und net::ERR_TUNNEL_CONNECTION_FAILED fehl — weil die git-Konfiguration nur git authentifizierte, während der eingebettete Browser, der den OAuth-Flow durchführte, keine eigenen Proxy-Anmeldedaten hatte. Jedes Subsystem muss separat informiert werden.

# shell-wide (respected by curl, wget, pip, most SDKs)
export HTTP_PROXY="http://USER:PASS@gate.quantumproxies.io:8000"
export HTTPS_PROXY="$HTTP_PROXY"
export NO_PROXY="localhost,127.0.0.1,.internal"

# npm - both keys, or https installs will 407
npm config set proxy       "$HTTP_PROXY"
npm config set https-proxy  "$HTTPS_PROXY"

# git
git config --global http.proxy  "$HTTP_PROXY"
git config --global https.proxy "$HTTPS_PROXY"

# apt - /etc/apt/apt.conf.d/95proxies
# Acquire::http::Proxy  "http://USER:PASS@gate.quantumproxies.io:8000";
# Acquire::https::Proxy "http://USER:PASS@gate.quantumproxies.io:8000";

Ein Sicherheitshinweis, während Sie all diese Dateien bearbeiten: Anmeldedaten in einer globalen git- oder npm-Konfiguration enden im Klartext, und Proxy-URLs mit eingebetteten Passwörtern gelangen in die Shell-Historie, CI-Protokolle und Fehlerverfolgungen. Auf Maschinen mit einer stabilen Adresse vermeidet IP-Whitelisting das Geheimnis vollständig.

Vergleich von user:pass Proxy-Authentifizierung versus IP-Whitelist-Authentifizierung, der die Portabilitäts- und Geheimnisverarbeitungs-Abwägungen zeigt
Anmeldedaten reisen mit Ihrer Konfiguration; Whitelists reisen mit Ihrem Netzwerk. Wählen Sie pro Umgebung, niemals beide gleichzeitig.

Ein 407 ist nie die Schuld der Zielseite

Es ist erwähnenswert, weil es Sie davor bewahrt, Geistern nachzujagen. Wenn Sie 407er erhalten, wird kein Rotieren von Benutzeragenten, Hinzufügen von Headern oder Ändern von Exit-Ländern helfen — die Anfrage hat Ihren Proxy noch nicht verlassen. Sperren, die von der Zielseite kommen, sehen anders aus: Ein 403 Forbidden bedeutet, dass die Seite Sie abgelehnt hat, und ein 429 Too Many Requests bedeutet, dass Sie zu schnell waren. Diagnostizieren Sie, welches der drei Sie tatsächlich haben, bevor Sie Code schreiben. Und wenn Python ProxyError oder SSLError wirft, anstatt eines sauberen 407, behandelt unser Leitfaden zum Debuggen von ProxyError in Requests die Transportebene-Fehler.

Häufig gestellte Fragen

Wie löse ich 407 Proxy-Authentifizierung erforderlich?

Geben Sie gültige Anmeldedaten in die Proxy-URL als http://user:pass@host:port ein, kodieren Sie alle reservierten Zeichen prozentual und konfigurieren Sie sowohl die HTTP- als auch die HTTPS-Proxy-Einstellungen. Wenn Ihr Anbieter stattdessen IP-Whitelisting verwendet, autorisieren Sie Ihre aktuelle öffentliche IP und senden Sie keine Anmeldedaten. Überprüfen Sie mit curl -x gegen einen IP-Echo-Dienst, bevor Sie Ihren Anwendungscode anfassen.

Was bedeutet 407 Proxy-Authentifizierung erforderlich?

Es bedeutet, dass ein Vermittlungsproxy die Anfrage aufgrund fehlender gültiger Proxy-Anmeldedaten abgelehnt hat. Die Antwort enthält einen Proxy-Authenticate-Header, der das Schema benennt, und der Client soll mit Proxy-Authorization erneut versuchen. Es ist von 401 zu unterscheiden, das vom Zielserver und nicht vom Proxy dazwischen kommt.

Wie behebe ich npm Fehler 407?

Setzen Sie beide Schlüssel: npm config set proxy und npm config set https-proxy, jeweils mit der vollständigen http://user:pass@host:port URL. Der Registry-Verkehr ist HTTPS, also schlägt eine nur-HTTP-Einstellung am CONNECT-Tunnel fehl. Kodieren Sie Sonderzeichen im Passwort prozentual und überprüfen Sie, ob eine projektbezogene .npmrc Ihre globale überschreibt.

Warum wirft Python Tunnelverbindung fehlgeschlagen: 407?

Weil die HTTPS-Anfrage einen CONNECT-Tunnel öffnete, der keine Proxy-Anmeldedaten trug. Setzen Sie sowohl die http- als auch die https-Schlüssel des proxies-Dicts auf dieselbe authentifizierte URL. Überprüfen Sie auch, ob HTTP_PROXY oder HTTPS_PROXY in der Umgebung Ihr Dict überschreibt — setzen Sie session.trust_env = False, um das auszuschließen.

Wie setze ich die Proxy-Authentifizierung in Postman?

Öffnen Sie die Einstellungen, gehen Sie zum Proxy-Tab, aktivieren Sie die benutzerdefinierte Proxy-Konfiguration, geben Sie Host und Port ein, dann aktivieren Sie das Proxy-Auth-Feld und fügen Sie den Benutzernamen und das Passwort hinzu. Auf den System-Proxy-Schalter zu vertrauen ist der übliche Fehler — er leitet den Verkehr durch den Proxy, liefert aber nie Anmeldedaten, sodass jede Anfrage 407 zurückgibt.

Fünf Ursachen decken im Wesentlichen jeden 407 in der freien Wildbahn ab: fehlende Anmeldedaten, nicht kodierte Sonderzeichen, eine Whitelist-IP, die sich geändert hat, ein nicht authentifizierter CONNECT-Tunnel und ein Tool mit eigener Konfiguration. Arbeiten Sie sie in dieser Reihenfolge ab und der Statuscode verschwindet — dann können Sie sich Sorgen machen, was die Zielseite von Ihnen hält.

Erhalten Sie Wohnproxies mit user:pass oder IP-Whitelist-Authentifizierung