Am Ende dieser Anleitung zur AIOHTTP-Proxy-Integration werden Sie wissen:
- Was AIOHTTP ist.
- Warum Sie Proxy verwenden sollten.
- Wie man HTTP-, HTTPS- oder SOCKS-Proxy in AIOHTTP einstellt.
- Wie man mit Proxyauthentifizierung, SSL-Zertifikatsfehlern, IP-Rotation und mehr umgeht.
Was ist AIOHTTP?
AIOHTTP ist ein beliebtes, asynchrones Open-Source-HTTP-Client/Server-Framework in Python. Seine Hauptmerkmale sind:
- Unterstützung sowohl für die Client- als auch für die Serverseite des HTTP-Protokolls.
- Unterstützung für Client- und Server-Web-Sockets.
- Bereitstellung eines Webservers mit Middleware und steckbarem Routing.
Was in diesem Tutorial im Vordergrund steht, ist seine Fähigkeit, als HTTP-Client zu agieren und HTTP-Anfragen auf asyncio auszuführen. AIOHTTP eignet sich besonders gut zum Erstellen von Skripten, die mehrere gleichzeitige Anfragen effizient verarbeiten müssen.
Zum Zeitpunkt der Erstellung dieses Artikels hat AIOHTTP über 14k Sterne auf GitHub.
Warum benötigen Sie einen AIOHTTP-Proxy?
Ein guter Grund für die Verwendung eines Proxy in AIOHTTP ist der Schutz Ihrer Online-Identität. Indem Sie Ihre Anfrage an einen Proxyserverweiterleiten, können Sie Ihre IP und Ihren Standort verbergen, sodass die Zielseite glaubt, dass Ihre Anfrage vom Proxyserver und nicht von Ihnen stammt. Dies bedeutet, dass es schwieriger wird, Sie zu identifizieren und zu verfolgen, was die Datensicherheit Ihrer Online-Aktivitäten erhöht und gleichzeitig IP-Sperren und geografische Einschränkungen vermeidet.
Beachten Sie, dass Sie das gleiche Ergebnis mit Requests
erreichen können, wie in unserem Requests
Proxy Integrationstutorial beschrieben.
Einen Proxy in AIOHTTP Proxy einrichten
In diesem Abschnitt erfahren Sie Schritt für Schritt, wie Sie einen HTTP-, HTTPS- oder SOCKS-Proxy in AIOHTTP einrichten.
AIOHTTP-Voraussetzungen
Wir gehen hier davon aus, dass Sie Python bereits auf Ihrem Rechner installiert und ein Python-Projekt mit einer virtuellen Umgebung eingerichtet haben. Installieren Sie AIOHTTP und die empfohlenen Abhängigkeiten mit dem folgenden Befehl:
pip install aiohttp[speedups]
Dadurch wird aiohttp
zu den Abhängigkeiten Ihres Projekts hinzugefügt.
Öffnen Sie Ihre Python-Skriptdatei und fügen Sie den aiohttp
import:hinzu
import aiohttp
Damit aiohttp mit der Syntax async/await
funktioniert, müssen Sie asyncio
verwenden. Importieren Sie deshalb auch diese Bibliothek und richten Sie eine grundlegende async main ()
-Funktion ein:
import aiohttp
import aiohttp
import asyncio
async def main():
# aiohttp logic...
asyncio.run(main())
Perfekt! Sie sind jetzt bereit, die AIOHTTP-Proxy-Integrationslogik zu schreiben!
Proxy-Voraussetzungen
Bevor Sie erfahren, wie Sie einen Proxy in AIOHTTP integrieren, müssen Sie verstehen, wie eine Proxy-URL aussieht.
Dies ist das Format der URL, die für die Verbindung zu einem Proxyserver in AIOHTTP erforderlich ist:
<PROTOCOL>://[<USERNAME>:<PASSWORD>@]<HOST>[:<PORT>]
Im Detail besteht diese aus:
<PROTOCOL>
:http
für HTTP-Proxys,https
für HTTPS-Proxys undsocks
,socks4
odersocks5
für Proxys in den verschiedenen SOCKS-Protokollen.<HOST>
: Die IP des Proxyservers oder seiner gesamten Domain (z. B.proxydomain.com
).<PORT>
: Der Port, auf den der Proxyserver hört.<USERNAME>
: Der optionale Benutzername zur Authentifizierung der Proxyverbindung.<PASSWORD>
: Das optionale Passwort zur Authentifizierung der Proxyverbindung.
Beachten Sie, dass <PROTOCOL>
und <HOST>
die einzigen erforderlichen Teile der URL sind. Der <PORT>
-Abschnitt ist optional, aber in der Regel müssen Sie ihn angeben. Zuletzt ist der Abschnitt <USERNAME>:<PASSWORD>
mit den Anmeldeinformationen nur erforderlich, wenn es sich um authentifizierte Proxys handelt.
Wenn Sie keine URL eines Proxyservers haben, können Sie eine kostenlos online erhalten. Bedenken Sie jedoch gleichzeitig, dass kostenlose Proxys unzuverlässig, datenverschlingend, inkonsistent, fehleranfällig und fragwürdig sind. Sie eignen sich nur zu Lernzwecken. Für die Produktion benötigen Sie einen zuverlässigen Premium-Proxy von einem erstklassigen Anbieter wie Bright Data.
Im Verlauf dieses Artikels erfahren Sie, wie Sie einen Bright Data-Proxy erhalten und ihn in AIOHTTP verwenden können.
HTTP-Proxy-Integration
Wie in der Dokumentation erwähnt, unterstützt AIOHTTP die HTTP-Proxy-Integration. Angenommen, dies ist die URL Ihres HTTP-Proxys:
http://190.6.23.219:999
Sie können sie in Ihrer AIOHTTP-Anfrage angeben, indem Sie die folgende Proxy-Option verwenden:
async with aiohttp.ClientSession() as session:
async with session.get(
'https://example.com',
proxy='http://190.6.23.219:999'
) as response:
print(response.status)
AIOHTTP leitet nun die GET-Anfrage über die Proxy-URL weiter, die als -Proxy
-Argument an die get ()
-Funktion weitergegeben wurde.
Beachten Sie, dass Sie einen HTTP-Proxy sowohl für HTTP- als auch für HTTPS-Datenverkehr verwenden können.
HTTPS–Proxy-Integration
Wenn es um HTTPS-Proxys geht, wird es etwas komplexer. Wie in der AIOHTTP-Dokumentation angegeben:
„In Python 3.10 ist die Unterstützung für TLS in TLS für die Transporte deaktiviert, die
asyncio
verwendet. Wenn die weitere Version von Python (sagen wir v3.11) ein Attribut umschaltet, funktioniert es einfach™.aiohttp v3.8 und höher ist dafür bereit und hat bereits den entprechenden Code eingerichtet, unterstützt TLS-in-TLS und sendet daher HTTPS-Anfragen über HTTPS-Proxy-Tunnel.“
Mit anderen Worten, wenn Sie HTTPS-Proxys in AIOHTTP verwenden möchten, müssen Sie Python auf Version 3.11 und aiohttp
auf v3.8 oder höher aktualisieren. Der Ansatz zur HTTPS-AIOHTTP-Proxy-Integration bleibt derselbe wie oben beschrieben. Der einzige veränderte Aspekt ist, dass das Proxy-Protokoll https
und nicht mehr http
ist.
SOCKS-Proxy-Integration
AIOHTTP unterstützt standardmäßig keine SOCKS-Proxys. Wenn Sie einen SOCKS-Proxy in AIOHTTP verwenden möchten, müssen Sie aiohtpp-socks
installieren:
pip install aiohttp_socks
Diese Bibliothek verwendet python-Socks
, um AIOHTTP mit SOCKS4(a)- und SOCKS5(h)-Unterstützung zu erweitern.
Nehmen wir an, dies ist die URL Ihres SOCKS-Proxys:
socks5://98.175.31.195:4145
Benutzen Sie sie in AIOHTTP wie folgt:
# initialize a SOCKS proxy connector
connector = ProxyConnector.from_url('socks5://98.175.31.195:4145')
# initialize an AIOHTTP client with the SOCKS proxy connector
async with aiohttp.ClientSession(connector=connector) as session:
async with session.get('https://example.com') as response:
print(response.status)
AIOHTTP leitet nun die GET-Anfrage über den angegebenen SOCKS-Proxy weiter.
ProxyConnector
kommt von aiohttp-socks
, vergessen Sie also nicht, zu importieren mit:
from aiohttp_socks import ProxyConnector
Hinter den Kulissen definiert aiohttp-socks
einen AIOHTTP Connector, um die Anfragen zu optimieren und sie durch den angegebenen SOCKS-Proxy laufen zu lassen.
Vollständiges Beispiel
Sie haben gerade gelernt, wie man einen Proxy mit AIOHTTP benutzt. Lassen Sie uns anhand eines vollständigen Beispiels überprüfen, ob die oben genannten Ansätze funktionieren!
Der Einfachheit halber werden wir mit einem HTTP-Proxy arbeiten, aber Sie können das folgende Beispiel problemlos an HTTPS und SOCKS anpassen.
Die Ziel-URL der GET-Anfrage ist der /ip
-Endpunkt aus dem HttpBin-Projekt. Diese API gibt die IP der eingehenden Anfrage zurück. Wenn die Proxy-Integration erfolgreich ist, sollte der Endpunkt also mit der IP des Proxyservers antworten und nicht mit Ihrer IP.
Gehen Sie noch einmal davon aus, dass dies die URL Ihres HTTP-Proxyservers ist:
http://190.6.23.219:999
Integrieren Sie sie in AIOHTTP und drucken Sie die vom Endpunkt https://httpbin.io/ip zurückgegebenen Daten aus mit:
import aiohttp
import asyncio
async def main():
async with aiohttp.ClientSession() as session:
# perform a GET request through an HTTP proxy
async with session.get(
'https://httpbin.io/ip',
proxy='http://190.6.23.219:999'
) as response:
# extract the response data and print it
json = await response.json()
print(json)
asyncio.run(main())
Führen Sie dieses Skript aus, dann sollten Sie Folgendes erhalten:
{
'origin': '190.6.23.219'
}
Und voilà! Das ist genau die IP des Proxyservers, was bedeutet, dass die AIOHTTP-Proxy-Integration wie magisch funktioniert.
Hinweis: Proxyserver sind kurzlebig. Wenn Sie dieses Tutorial lesen, funktioniert der ausgewählte Proxy bereits nicht mehr und das obige Skript schlägt fehl. Damit es funktioniert, ersetzen Sie den HTTP-Proxy durch einen neuen, funktionierenden Proxy.
AIOHTPP-Proxy: Erweiterte Anwendungsfälle
Sie kennen die Grundlagen der AIOTTP-Proxy-Integration, aber was ist mit komplexeren Techniken? Erfahren Sie mehr in diesem Abschnitt!
Globale Proxys über Umgebungsvariablen
AIOHTTP unterstützt zwei Möglichkeiten, den zu verwendenden Proxy zu bestimmen:
- Es verwendet die Proxy-URL, die an das Proxy-Argument übergeben wurde.
- Wenn
trust_env
aufTrue
gesetzt ist, liest es die UmgebungsvariablenHTTP_PROXY
undHTTPS_PROXY
.
Sie können daher einen Proxy global in AIOHTTP konfigurieren, indem Sie die folgenden Umgebungen einstellen:
HTTP_PROXY
: Die URL des Proxyservers, der für HTTP-Anfragen verwendet werden soll.HTTPS_PROXY
: Die URL des Proxyservers, der für HTTPS-Anfragen verwendet werden soll.
Stellen Sie sie beispielsweise unter Linux oder macOS mit den folgenden Befehlen ein:
export HTTP_PROXY="<PROTOCOL>://[<USERNAME>:<PASSWORD>@]<HOST>[:<PORT>]"
export HTTPS_PROXY="<PROTOCOL>://[<USERNAME>:<PASSWORD>@]<HOST>[:<PORT>]"
Als Nächstes übergeben Sie trust_env=True
an aiohttp.clientSession()
:
async with aiohttp.ClientSession(trust_env=True) as session:
Sie können jetzt session.get()
ohne proxy
argumentaufrufen
async with aiohttp.ClientSession(trust_env=True) as session:
async with session.get('https://example.com') as response:
print(response.status)
Großartig! AIOHTTP verwendet die in den Umgebungsvariablen angegebenen Proxys für jede HTTP- und HTTPS-Anfrage.
Folgen Sie dem Link, um mehr zu erfahren, da derselbe Mechanismus auch mit Proxys in cURLfunktioniert.
Ansätze zur Proxy-Authentifizierung
Der Versuch, ohne die richtigen Anmeldeinformationen eine Verbindung zu einem authentifizierten Proxy herzustellen, führt zu dem Fehler 407 Proxy-Authentifizierung erforderlich
.
Angenommen, der folgende String ist die URL für die Verbindung zu einem authentifizierten HTTP-Proxy:
http://admin:[email protected]:8928
Hier lautet die reine Proxy-URL:
http://20.198.112.312:892
Und die Anmeldeinformationen für die Authentifizierung lauten:
- Benutzername:
admin
- Passwort:
pk5ip98NWp56I9sjy
AIOHTTP unterstützt zwei Möglichkeiten, mit authentifizierten Proxys umzugehen:
- Geben Sie die Anmeldeinformationen direkt in der Proxy-URL an:
async with session.get(
'https://example.com/',
proxy='http://admin:[email protected]:8928'
) as response:
2. Übergeben Sie den Benutzernamen und das Passwort an ein AIOHttp.basicAuth()
-Objekt und verwenden Sie es dann in der proxy_auth
-Option:
proxy_auth = aiohttp.BasicAuth('admin', 'pK5ip98NWp56l9sjy')
async with session.get(
'https://example.com/',
proxy="http://20.198.112.312:892",
proxy_auth=proxy_auth
) as response:
Wunderbar! Die AIOHTTP-Proxyauthentifizierung ist kein Geheimnis mehr.
SSL-Zertifikatsfehler vermeiden
Wenn Sie einen Proxy in AIOHTTP einrichten, schlagen Ihre Anfragen möglicherweise aufgrund des folgenden Fehlers fehl:
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain
Um diese Probleme mit dem SSL-Zertifikat zu vermeiden, deaktivieren Sie die SSL-Überprüfung mit ssl=False
:
async with aiohttp.ClientSession() as session:
async with session.get(
'https://example.com',
proxy='http://190.6.23.219:999',
ssl=False # turn of SSL certificate verification
) as response:
print(response.status)
Die Fehler bei der Überprüfung des AIOHTTP-SSL-Zertifikats verschwinden sofort.
Rotierende Proxys in AIOHTTP
Wenn Sie sich immer wieder auf denselben Proxyserver verlassen, besteht die Möglichkeit, dass die Zielseite ihre IP-Adresse blockiert. Um dies zu vermeiden, müssen Sie sicherstellen, dass Ihre Anfrage unterschiedliche Proxyserver verwendet.
Das können Sie folgendermaßen tun:
- Füllen Sie eine Python-Liste mit vielen Proxy-URLs auf.
- Wählen Sie vor jeder Anfrage zufällig eine Proxy-URL aus.
- Stellen Sie die gewählte Proxy-URL in AIOHTTP ein.
Das Hauptproblem bei diesem Ansatz ist, dass er Boilerplate-Code beinhaltet. Außerdem ist der Zugriff auf einen Pool zuverlässiger Proxyserver erforderlich, den es nicht kostenlos gibt. Zum Glück hat Bright Data eine effektivere Lösung! Seine rotierenden Proxys ändern automatisch die Ausgangs-IP-Adressen für Sie, sind in 195 Ländern verfügbar, bieten eine außergewöhnliche Netzwerkverfügbarkeit und garantieren eine Erfolgsquote von 99,9 %.
Im nächsten Kapitel erfahren Sie, wie Sie beginnen, die rotierenden Proxys von Bright Data in AIOHTTP zu verwenden.
Integration von AIOHTTP mit einem Bright Data Proxy
Bright Data betreibt die besten Proxy-Server der Welt und betreut Fortune-500-Unternehmen sowie über 20.000 Kunden. Sein weltweites Proxy-Netzwerk umfasst:
- Rechenzentrum-Proxys – über 770.000 Rechenzentrum-IPs.
- Proxys für Privatkunden – Über 72 Millionen IPs für Privatkunden in mehr als 195 Ländern.
- ISP-Proxys – Über 700.000 ISP-IPs.
- Mobile Proxys– über 7 Millionen mobile IPs.
Dies ist eines der größten und zuverlässigsten Proxy-Netzwerke der Welt!
Führen Sie die folgenden Schritte aus und erfahren Sie, wie Sie die Proxys von Bright Data in AIOHTTP verwenden.
Falls Sie bereits ein Konto haben, melden Sie sich bei Bright Data an. Andernfalls können Sie ein kostenloses Konto erstellen. Sie erhalten Zugriff auf das folgende Benutzer-Dashboard:
Klicken Sie wie unten angegeben auf die Schaltfläche „Proxy-Produkte anzeigen“:
Sie werden auf die folgende Seite „Proxys und Scraping-Infrastruktur“ weitergeleitet:
Scrollen Sie nach unten, suchen Sie nach der Karte „Proxys für Privatkunden“ und klicken Sie auf die Schaltfläche „Los geht’s“:
Sie gelangen zum Dashboard für die Proxykonfiguration für Privatkunden. Folgen Sie dem geführten Assistenten und richten Sie den Proxy-Service nach Ihren Bedürfnissen ein. Wenn Sie Zweifel bezüglich der Konfiguration des Proxys haben, wenden Sie sich bitte an den 24/7-Support.
Gehen Sie zur Registerkarte „Zugriffsparameter“ und rufen Sie den Host, den Port, den Benutzernamen und das Passwort Ihres Proxys wie folgt ab:
Beachten Sie, dass das Feld „Host“ den Port bereits enthält.
Das ist alles, was Sie brauchen, um die Proxy-URL zu erstellen und sie in AIOHTTP zu verwenden. Fügen Sie alle Informationen zusammen und erstellen Sie eine URL mit der folgenden Syntax:
<Username>:<Password>@<Host>
In diesem Fall wäre es zum Beispiel:
brd-customer-hl_4hgu8dwd-zone-residential:[email protected]:XXXXX
Schalten Sie auf „Aktiver Proxy“ um, folgen Sie den letzten Anweisungen und schon kann es losgehen!
Ihr AIOHTTP-Proxy-Snippet für die Bright Data-Integration sieht wie folgt aus:
import aiohttp
import asyncio
async def main():
async with aiohttp.ClientSession() as session:
# perform a GET request through an HTTP proxy
async with session.get(
'https://lumtest.com/myip.json',
proxy='http://brd-customer-hl_4hgu8dwd-zone-residential:[email protected]:XXXXX'
) as response:
# extract the response data and print it
json = await response.json()
print(json)
asyncio.run(main())
Fazit
In diesem Tutorial zur AIOHTTP-Proxy-Integration haben Sie erfahren, warum Sie Proxys verwenden sollten und wie Sie dies mit aiohttp
tun können. Sie wissen nun, wie Sie einen HTTP-, HTTPS- oder SOCKS-Proxy in der beliebten Python-HTTP-Client-Bibliothek AIOHTTP einrichten können. Wie hier bewiesen, sind dafür nur ein paar Codezeilen erforderlich!
Dank dieser Anleitung haben Sie auch verstanden, warum Sie niemals kostenlose Proxydienste verwenden sollten. Stattdessen sollten Sie zuverlässige Proxyserver von einem seriösen Proxydienstanbieter verwenden. Der beste Anbieter auf dem Markt? Bright Data! Das Verfahren zur Integration von Proxys in AIOHTTP bleibt gleich, aber die Vorteile von Premium-Proxys sind endlos.
Keine Kreditkarte erforderlich