Ein Proxy besteht aus fünf Informationen: einem Schema, einem Benutzernamen, einem Passwort, einem Host und einem Port. Anbieter, Tools und Foren ordnen diese Teile in unterschiedlicher Reihenfolge an, und ein Proxy, der in einem Tool funktioniert, scheitert in einem anderen nur deshalb, weil er in der falschen Form eingefügt wurde. Dieser Leitfaden zeigt die gängigen Layouts, welche Tools welches erwarten, und wie man die Fehler vermeidet, die wir am häufigsten bei residential proxies sehen.
Die fünf gängigen Layouts
Hier ist derselbe Shifter-Proxy in den fünf Formaten, die unser Dashboard-Proxy-Generator erzeugen kann. Der Benutzername trägt das Targeting und die Session, daher ist er länger, als man erwarten würde.
| Format | Beispiel |
|---|---|
scheme://user:pass@host:port | http://customer-USERNAME-sid-a1-ttl-60:PASSWORD@p.shifter.io:443 |
user:pass@host:port | customer-USERNAME-sid-a1-ttl-60:PASSWORD@p.shifter.io:443 |
host:port:user:pass | p.shifter.io:443:customer-USERNAME-sid-a1-ttl-60:PASSWORD |
user:pass:host:port | customer-USERNAME-sid-a1-ttl-60:PASSWORD:p.shifter.io:443 |
host:port@user:pass | p.shifter.io:443@customer-USERNAME-sid-a1-ttl-60:PASSWORD |
Das erste ist eine echte URL, definiert durch Webstandards, und es ist die sicherste Wahl, wann immer ein Tool sie akzeptiert. Die anderen sind Konventionen. Sie existieren, weil viele Massen-Tools einfache Textlisten importieren, ein Proxy pro Zeile, und jedes Tool seine eigene Reihenfolge gewählt hat.
Welche Tools welches erwarten
curl. Übergeben Sie die URL-Form an -x. Lassen Sie das Schema weg, geht curl von http:// aus. Sie können die Zugangsdaten auch getrennt halten mit -U username:password, was Encoding-Probleme vermeidet. Unser Leitfaden zur Einrichtung von curl und Postman enthält vollständige Beispiele.
Python requests und Scrapy. Beide verwenden die URL-Form. Bei requests benennen die Dictionary-Schlüssel das Schema der Website, und die Werte benennen den Proxy, daher zeigen beide üblicherweise auf einen http://-Proxy:
proxy = "http://customer-USERNAME:PASSWORD@p.shifter.io:443"
proxies = {"http": proxy, "https": proxy}
Playwright. Nimmt die Teile als separate Felder entgegen: server mit Schema, Host und Port, sowie username und password. Wenn Sie diese selbst aufteilen, vermeiden Sie jedes Encoding-Problem.
Puppeteer und Chrome. Das Flag --proxy-server nimmt nur Host und Port entgegen. Zugangsdaten laufen über page.authenticate().
Browser-Profilmanager und Massen-Tools. Viele importieren Listen im Format host:port:user:pass, und manche fragen, welche Reihenfolge Ihre Liste verwendet. Prüfen Sie den Import-Bildschirm, bevor Sie einige hundert Zeilen einfügen.
Das Schema beschreibt den Proxy, nicht die Website
Das ist der häufigste Fehler, den wir sehen. Ein Kunde, der HTTPS-Websites scrapt, schreibt https:// vor den Proxy, und jede Anfrage schlägt mit einem TLS-Fehler fehl.
Das Schema teilt Ihrem Client mit, wie er mit dem Proxy sprechen soll. Eine HTTPS-Website wird über einen http://-Proxy mit der CONNECT-Methode erreicht: Der Client bittet den Proxy, einen Tunnel zu öffnen, und führt dann TLS mit der Website dadurch aus. Die Verbindung zur Website ist weiterhin Ende-zu-Ende verschlüsselt. Das Schreiben von https://p.shifter.io:443 bittet den Client, TLS direkt mit dem Gateway zu beginnen, und unser Gateway bietet das nicht an, sodass der Handshake fehlschlägt. Verwenden Sie http:// sowohl für HTTP- als auch für HTTPS-Seiten, oder socks5://, wenn Ihr Tool SOCKS bevorzugt.
Bei SOCKS gibt es eine zweite Wahl. socks5:// löst den Namen der Website auf Ihrem Rechner auf, während socks5h:// den Namen zur Auflösung an den Proxy sendet. Wenn Ihnen wichtig ist, wo DNS-Abfragen stattfinden, lesen Sie unseren Leitfaden zur Vermeidung von DNS-Lecks.
Sonderzeichen brechen Formate
Jedes Format reserviert bestimmte Zeichen.
- URL-Form:
@,:,/,#,?und%innerhalb eines Benutzernamens oder Passworts müssen prozentkodiert werden. Ein Passwort wiep@ss:wordwird zup%40ss%3Aword. - Durch Doppelpunkte getrennte Formen: ein Doppelpunkt innerhalb des Passworts verschiebt jedes nachfolgende Feld, sodass das Tool den falschen Host oder Port liest.
Die Targeting- und Session-Teile eines Shifter-Benutzernamens verwenden nur Buchstaben, Ziffern, Bindestriche und Unterstriche, zum Beispiel city-new_york, daher sind sie in jedem Format sicher. Wenn Sie ein Passwort mit Symbolen festlegen, ist die URL-Form mit Encoding, oder ein Tool mit separaten Feldern, der zuverlässige Weg.
Zwischen Formaten konvertieren
Wenn ein Tool Ihnen ein Format liefert und Ihr Code ein anderes möchte, konvertieren Sie die Liste, statt Zeilen von Hand zu bearbeiten. Diese Python-Funktion wandelt jedes der fünf Layouts in die URL-Form um und kodiert die Zugangsdaten:
from urllib.parse import quote
def to_proxy_url(line: str, scheme: str = "http") -> str:
line = line.strip()
if "://" in line:
return line
if "@" in line:
left, right = line.split("@", 1)
if left.rsplit(":", 1)[-1].isdigit():
hostport, creds = left, right # host:port@user:pass
else:
creds, hostport = left, right # user:pass@host:port
user, password = creds.split(":", 1)
host, port = hostport.rsplit(":", 1)
else:
parts = line.split(":")
if len(parts) != 4:
raise ValueError(f"unrecognised proxy line: {line}")
if parts[1].isdigit():
host, port, user, password = parts # host:port:user:pass
else:
user, password, host, port = parts # user:pass:host:port
return f"{scheme}://{quote(user, safe='')}:{quote(password, safe='')}@{host}:{port}"
print(to_proxy_url("p.shifter.io:443:customer-USERNAME:PASSWORD"))
# http://customer-USERNAME:PASSWORD@p.shifter.io:443
Sie entscheidet die Reihenfolge, indem sie die Portnummer findet, kann die Layouts also nicht unterscheiden, wenn ein Benutzername oder Passwort komplett aus Ziffern besteht. In diesem Fall fragen Sie denjenigen, der Ihnen die Liste gegeben hat, welche Reihenfolge verwendet wird.
ISP-Proxys verwenden dieselben Formen
ISP-Proxys folgen denselben Regeln mit einem anderen Host. Jeder ISP-Proxy verbindet sich über isp.shifter.io:443, sodass eine Zeile in der Form host:port:user:pass so lautet: isp.shifter.io:443:USERNAME:PASSWORD. Jeder Proxy wird anhand seines Benutzernamens unterschieden, nicht anhand einer separaten IP und eines separaten Ports pro Proxy, was Leute überrascht, die Listen im Format ip:port:user:pass gewohnt sind.
Schnelle Prüfungen, wenn sich ein Proxy nicht verbindet
- 407 Proxy Authentication Required: der Proxy wurde erreicht, aber die Zugangsdaten wurden nicht akzeptiert. Prüfen Sie auf einen fehlenden oder vertauschten Benutzernamen und Passwort, oder ein nicht kodiertes Symbol. Unser Leitfaden zur Fehlerbehebung bei 407 deckt den Rest ab.
- TLS- oder Handshake-Fehler sofort: Sie haben wahrscheinlich
https://vor den Proxy geschrieben. Ändern Sie es zuhttp://. - Verbindung verweigert oder Timeouts bei jeder Anfrage: der Host oder Port ist falsch, oft weil eine durch Doppelpunkte getrennte Zeile in der falschen Reihenfolge gelesen wurde.
- Funktioniert in curl, schlägt in Ihrem Tool fehl: das Tool erwartet ein anderes Layout. Konvertieren Sie die Zeile, oder geben Sie die Felder separat ein.
Im Dashboard können Sie im Proxy-Generator das Protokoll und das Format auswählen, bevor Sie kopieren, und er lädt eine ganze Liste als CSV im selben Format herunter. Die richtige Form von Anfang an zu wählen, vermeidet die meisten dieser Fehler.
Quellen und Referenzen
- RFC 3986, Uniform Resource Identifier: Generic Syntax: rfc-editor.org
- curl, die Option —proxy: curl.se
- Requests, proxies: requests.readthedocs.io
- Playwright, HTTP proxy: playwright.dev