Skip to content
Intermediate / 10 min read

So richten Sie Smartproxy-Proxys unter Linux mit curl und Python für CLI-Automatisierung ein

Leiten Sie curl- und Python-Datenverkehr unter Linux über Smartproxy-Residential- oder Datacenter-Proxys, überprüfen Sie Ihre Exit-IP, fixieren Sie Sticky-Sessions und planen Sie wiederkehrende Prüfungen mit cron oder systemd.

Linux SOCKS5 HTTP(S)

Überblick

Dieses Tutorial zeigt, wie Sie Befehlszeilen- und Python-Datenverkehr unter Linux durch einen Proxy senden, einschließlich Authentifizierung, Exit-IP-Verifizierung, Session-Pinning und geplanten Ausführungen. Smartproxy wird hier als empfohlener Anbieter verwendet, da es Residential- und Datacenter-Proxys über HTTP und SOCKS5 mit monatlicher Pauschalabrechnung und einem IP-Pool von über 65 Mio. anbietet, aber jeder Schritt funktioniert mit jedem Proxy-Dienst, der dieselben Protokolle bereitstellt.

Am Ende dieses Leitfadens können Sie:

  • Sich mit curl von der Shell aus an Ihrem Proxy-Endpunkt authentifizieren
  • Bestätigen, dass ausgehender Datenverkehr über die Proxy-IP statt über Ihre eigene IP austritt
  • Denselben Endpunkt aus Python mit requests verwenden
  • Eine Sticky-Session fixieren oder IPs zwischen Anfragen rotieren
  • Health-Checks mit cron oder einem systemd-Timer automatisieren

Voraussetzungen

  • Ein Linux-Host (die folgenden Befehle verwenden Debian/Ubuntu; Fedora- und Arch-Äquivalente sind angegeben)
  • curl und Python 3.8 oder neuer
  • Ein Smartproxy-Konto mit aktivem Tarif und Proxy-Anmeldedaten
  • Den Endpunkt-Host und die Ports für das gewünschte Produkt, kopiert aus dem Dashboard in Ihrem Smartproxy-Konto
  • Ausgehenden Zugriff auf den Proxy-Port und keine Unternehmensfirewall oder VPN-Client, die ihn blockiert

Schritt 1 — Erforderliche Tools installieren

Installieren Sie curl und Python und erstellen Sie dann eine isolierte Umgebung für den Python-Client.

sudo apt update
sudo apt install -y curl python3 python3-venv

Verwenden Sie auf Fedora- oder RHEL-basierten Systemen:

sudo dnf install -y curl python3

Erstellen Sie eine virtuelle Umgebung und installieren Sie den HTTP-Client plus SOCKS-Unterstützung:

python3 -m venv ~/.venvs/proxy
source ~/.venvs/proxy/bin/activate
pip install --upgrade pip
pip install 'requests[socks]'

Das Extra requests[socks] zieht PySocks ein, wodurch socks5h://-URLs in Python funktionieren.

Schritt 2 — Anmeldedaten außerhalb Ihrer Skripte speichern

Das Hartkodieren von Anmeldedaten in Skripten oder deren Commit in ein Repository ist die häufigste Ursache für kompromittierte Proxy-Konten. Bewahren Sie sie in einer einzelnen Datei mit restriktiven Berechtigungen auf und laden Sie sie nur bei Bedarf.

install -d -m 700 ~/.config/smartproxy
install -m 600 /dev/null ~/.config/smartproxy/env

Öffnen Sie die Datei in Ihrem Editor und ersetzen Sie jeden Platzhalter durch die Werte, die in Ihrem Anbieter-Dashboard angezeigt werden:

# ~/.config/smartproxy/env
# Replace every REPLACE_WITH_ value using the endpoint and credentials
# from your provider dashboard. Do not commit this file to version control.
export SP_PROXY_HOST="REPLACE_WITH_ENDPOINT_HOST"
export SP_PROXY_PORT_HTTP="REPLACE_WITH_HTTP_PORT"
export SP_PROXY_PORT_SOCKS5="REPLACE_WITH_SOCKS5_PORT"
export SP_PROXY_USER="REPLACE_WITH_PROXY_USERNAME"
export SP_PROXY_PASS="REPLACE_WITH_PROXY_PASSWORD"

Laden Sie die Variablen in Ihre aktuelle Shell:

set -a; . ~/.config/smartproxy/env; set +a

Wenn Sie sowohl Residential- als auch Datacenter-Produkte verwenden, halten Sie für jedes ein separates Variablenpaar bereit, da sie normalerweise unterschiedliche Hosts oder Ports haben.

Schritt 3 — Zwischen HTTP und SOCKS5 wählen

Beide Protokolle werden von Smartproxy unterstützt, und die richtige Wahl hängt davon ab, was Sie durch den Tunnel senden.

Datenverkehrstyp Empfohlenes Protokoll Warum
HTTPS-Anfragen von curl, requests oder Scrapern HTTP-Proxy (CONNECT-Tunnel) Am einfachsten zu konfigurieren, funktioniert mit jedem HTTP-Client und übergibt den Ziel-Hostnamen an den Proxy
Nicht-HTTP-Datenverkehr wie SSH, SMTP oder benutzerdefinierte TCP-Clients SOCKS5 Protokollunabhängig, leitet beliebige TCP-Streams weiter
Tools, die Proxy-Authentifizierung nicht nativ unterstützen SOCKS5 Die Anmeldedaten werden von der Client-Bibliothek statt vom Ziel-Tool verarbeitet
Maximale Client-Kompatibilität HTTP Wird universell von HTTP-Bibliotheken und den meisten CLI-Tools unterstützt

Wenn Sie ausschließlich HTTPS-URLs abrufen, beginnen Sie mit HTTP und wechseln Sie nur dann zu SOCKS5, wenn ein Tool es erfordert.

Schritt 4 — Verbindung mit curl testen

Senden Sie eine Anfrage durch den HTTP-Proxy und geben Sie die Exit-IP aus, die das Ziel sieht:

curl -sS --max-time 30 \
  --proxy "http://${SP_PROXY_HOST}:${SP_PROXY_PORT_HTTP}" \
  --proxy-user "${SP_PROXY_USER}:${SP_PROXY_PASS}" \
  'https://api.ipify.org?format=json'

Testen Sie nun denselben Endpunkt über SOCKS5. Die Variante --socks5-hostname löst DNS am Proxy auf, wodurch verhindert wird, dass lokale DNS-Abfragen Ihren tatsächlichen Standort preisgeben:

curl -sS --max-time 30 \
  --socks5-hostname "${SP_PROXY_HOST}:${SP_PROXY_PORT_SOCKS5}" \
  --proxy-user "${SP_PROXY_USER}:${SP_PROXY_PASS}" \
  'https://api.ipify.org?format=json'

Vergleichen Sie das Ergebnis mit einer direkten Anfrage, die den Proxy vollständig umgeht:

curl -sS 'https://api.ipify.org?format=json'

Wenn die Proxy-IP von der direkten IP abweicht, läuft der Datenverkehr über den Proxy. Führen Sie den Proxy-Befehl einige Male aus, um zu sehen, ob sich die Exit-IP ändert; das zeigt Ihnen, ob Sie sich auf einem rotierenden oder sticky Endpunkt befinden.

Schritt 5 — Eine Sticky-Session fixieren oder bei jeder Anfrage rotieren

Rotierendes Verhalten ist bei den meisten Residential-Endpunkten Standard: Jede neue Verbindung kann über eine andere IP austreten. Bei Logins, mehrstufigen Formularen oder Checkout-ähnlichen Abläufen möchten Sie normalerweise dieselbe IP für eine ganze Anfragesequenz verwenden.

Ihr Anbieter erstellt sticky Benutzernamen aus einem Session-Token. Hängen Sie das Token an den Proxy-Benutzernamen an, und zwar mit dem exakten Muster, das im Session-Generator in Ihrem Dashboard angezeigt wird; üblicherweise sieht das wie ein Suffix am Benutzernamen aus:

export SP_SESSION_ID="$(openssl rand -hex 4)"
export SP_SESSION_USER="${SP_PROXY_USER}-session-${SP_SESSION_ID}"

Ersetzen Sie dann $SP_SESSION_USER überall dort, wo die obigen Befehle $SP_PROXY_USER verwenden. Verwenden Sie dasselbe Token für die Dauer der Aufgabe wieder und generieren Sie ein neues Token, wenn Sie eine frische Exit-IP wünschen.

Ziel Vorgehen
Viele unabhängige Seiten sammeln Standardmäßig rotierender Benutzername, eine Anfrage pro Verbindung
Einen Login oder Warenkorb intakt halten Ein Session-Token für den gesamten Workflow wiederverwenden
Last über eine Region verteilen Dasselbe Session-Token mit einem festen Land oder einer festen Stadt verwenden, wenn Ihr Tarif diese Optionen im Dashboard bereitstellt
Parallele Worker isolieren Jedem Worker-Prozess ein eigenes, zufällig generiertes Session-Token geben

Schritt 6 — Den Proxy aus Python verwenden

Wenn die Umgebungsdatei geladen ist, stehen dieselben Variablen Python zur Verfügung. Dieses Beispiel verwendet den HTTP-Proxy für eine HTTPS-Anfrage:

import os
from urllib.parse import quote

import requests

host = os.environ['SP_PROXY_HOST']
port = os.environ['SP_PROXY_PORT_HTTP']
user = quote(os.environ['SP_PROXY_USER'], safe='')
password = quote(os.environ['SP_PROXY_PASS'], safe='')

proxies = {
    'http': f'http://{user}:{password}@{host}:{port}',
    'https': f'http://{user}:{password}@{host}:{port}',
}

response = requests.get(
    'https://api.ipify.org?format=json',
    proxies=proxies,
    timeout=30,
)
response.raise_for_status()
print(response.json())

Um zu SOCKS5 zu wechseln, ändern Sie nur das Schema und den Port. Das Schema socks5h führt eine remote DNS-Auflösung durch, passend zu curl --socks5-hostname:

socks_port = os.environ['SP_PROXY_PORT_SOCKS5']
socks_proxies = {
    'http': f'socks5h://{user}:{password}@{host}:{socks_port}',
    'https': f'socks5h://{user}:{password}@{host}:{socks_port}',
}

Zwei praktische Hinweise:

  • Setzen Sie immer einen expliziten timeout. Proxy-Netzwerke sind groß, und einzelne Exit-Knoten können langsam oder nicht verfügbar sein; ein fehlender Timeout verwandelt einen schlechten Knoten in einen hängenden Prozess.
  • Kodieren Sie Benutzername und Passwort prozentual, wie mit quote() gezeigt, da Session-Trennzeichen und Sonderzeichen Proxy-URLs beschädigen, wenn sie unverarbeitet übergeben werden.

Ein kleiner Retry-Wrapper macht Skripte deutlich widerstandsfähiger:

import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

session = requests.Session()
session.proxies.update(proxies)
session.mount('https://', HTTPAdapter(max_retries=Retry(
    total=3,
    backoff_factor=1,
    status_forcelist=[429, 500, 502, 503, 504],
)))

Schritt 7 — Die Prüfung planmäßig ausführen

Speichern Sie das Verifizierungs-Snippet als ~/scripts/check_proxy.py und planen Sie es dann mit cron, damit Anmeldedatenprobleme und tote Endpunkte frühzeitig erkannt werden.

# Rotate a log of exit IPs every hour
0 * * * * set -a; . $HOME/.config/smartproxy/env; set +a; $HOME/.venvs/proxy/bin/python $HOME/scripts/check_proxy.py >> $HOME/proxy-check.log 2>&1

Derselbe Job als systemd-Service und -Timer, was mit journalctl einfacher zu überwachen ist:

# ~/.config/systemd/user/proxy-check.service
[Unit]
Description=Verify proxy exit IP

[Service]
Type=oneshot
EnvironmentFile=%h/.config/smartproxy/env
ExecStart=%h/.venvs/proxy/bin/python %h/scripts/check_proxy.py
# ~/.config/systemd/user/proxy-check.timer
[Unit]
Description=Run the proxy check hourly

[Timer]
OnCalendar=hourly
Persistent=true

[Install]
WantedBy=timers.target

Aktivieren und starten Sie ihn mit:

systemctl --user daemon-reload
systemctl --user enable --now proxy-check.timer
systemctl --user list-timers proxy-check.timer

Fehlerbehebung

Symptom Wahrscheinliche Ursache Lösung
407 Proxy Authentication Required Falscher Benutzername oder falsches Passwort oder Sonderzeichen nicht URL-kodiert Anmeldedaten erneut aus dem Dashboard kopieren und in Python mit quote() prozentual kodieren
curl: (5) Could not resolve proxy Host-Variable ist leer oder falsch geschrieben echo "$SP_PROXY_HOST" ausführen und die Env-Datei erneut laden
curl: (7) Failed to connect oder ein Timeout Port durch Firewall, VPN blockiert oder falscher Port für das Produkt Port im Dashboard bestätigen und mit nc -zv "$SP_PROXY_HOST" "$SP_PROXY_PORT_HTTP" testen
curl: (56) CONNECT tunnel failed Der Exit-Knoten hat die Verbindung getrennt oder das Ziel hat die Anfrage abgelehnt Wiederholen und die Parallelität reduzieren, wenn es ständig auftritt
Anfragen funktionieren im Browser, schlagen aber in curl über SOCKS5 fehl Lokale DNS-Auflösung --socks5-hostname statt --socks5 hinzufügen
Python meldet Missing dependencies for SOCKS support PySocks ist nicht installiert Venv aktivieren und pip install 'requests[socks]' ausführen
Exit-IP ändert sich nie Sie verwenden ein Sticky-Session-Token wieder Generieren Sie für jeden Worker eine neue Session-ID
Exit-IP entspricht Ihrer eigenen IP Proxy-Variablen wurden nicht geladen oder ein Tool hat den Proxy umgangen Env-Datei erneut laden und den Vergleich direkt vs. über Proxy erneut ausführen

Zusätzliche Prüfungen, die sich lohnen, wenn sich etwas unerwartet verhält:

  1. Geben Sie die aufgelösten Variablen mit env | grep SP_PROXY aus, um Shell-Scoping-Fehler auszuschließen.
  2. Testen Sie beide Protokolle; wenn SOCKS5 funktioniert und HTTP nicht, liegt das Problem an der Client-Konfiguration und nicht am Endpunkt.
  3. Protokollieren Sie die Exit-IP zusammen mit dem Zeitstempel in der Ausgabe Ihres Jobs, damit Sie Fehler bestimmten Knoten zuordnen können.

Zusammenfassung

  • Smartproxy stellt Residential- und Datacenter-Proxys über HTTP und SOCKS5 mit monatlicher Pauschalabrechnung bereit, was es zu einem vernünftigen empfohlenen Anbieter für CLI- und Skripting-Workflows macht.
  • Bewahren Sie Anmeldedaten in einer Umgebungsdatei mit chmod 600 auf und laden Sie sie mit set -a; . file; set +a, anstatt sie in Skripte einzubetten.
  • Verwenden Sie den HTTP-Proxy für reine HTTPS-Tools und --socks5-hostname oder socks5h://, wenn Sie protokollunabhängige Weiterleitung oder remote DNS-Auflösung benötigen.
  • Überprüfen Sie die Einrichtung, indem Sie eine Proxy-Anfrage mit einer direkten vergleichen; übereinstimmende IPs bedeuten, dass der Proxy umgangen wurde.
  • Hängen Sie für sticky Workflows ein Session-Token an den Benutzernamen an und generieren Sie für parallele rotierende Jobs ein neues Token pro Worker.
  • Binden Sie dieselbe Prüfung in cron oder einen systemd-Timer ein, damit ablaufende Anmeldedaten und tote Endpunkte bemerkt werden, bevor ein Produktionslauf fehlschlägt.