Eine aiohttp-Anfrage durch einen HTTP-Proxy
Senden Sie mit aiohttp eine Anfrage durch einen HTTP-Proxy ohne Authentifizierung, prüfen Sie den Status und beenden Sie den asynchronen Lebenszyklus ausdrücklich.
Für eine einzelne asynchrone Anfrage durch einen HTTP-Proxy ohne Authentifizierung legen Sie die Route bei session.get() fest. Fügen Sie aiohttp bei Bedarf zum Projekt hinzu:
uv add aiohttpErsetzen Sie die folgende Dokumentationsadresse durch Ihren HTTP-Listener oder einen Kandidaten aus der HTTP-Proxy-Liste. Er muss CONNECT zum HTTPS-Ziel erlauben; ein reiner SOCKS-Endpunkt braucht einen passenden Connector statt dieses proxy-Arguments.
import asyncio
import aiohttp
async def main():
timeout = aiohttp.ClientTimeout(total=15, connect=5)
async with aiohttp.ClientSession(
timeout=timeout,
trust_env=False,
) as session:
async with session.get(
"https://example.com/",
proxy="http://203.0.113.10:8080",
) as response:
print(response.status)
print((await response.text())[:200])
asyncio.run(main())
Die Anfrage gibt ihren HTTP-Status und die ersten 200 Zeichen des Antworttexts aus. Ein 403 oder 429 bleibt hier eine prüfbare Antwort; rufen Sie response.raise_for_status() auf, wenn Ihre Anwendung erfolglose Status in Ausnahmen umwandeln soll. Die asynchronen Kontextmanager schließen Sitzung und Antwort am Ende ihrer Blöcke, auch bei einer Ausnahme.
Das 15-sekündige total-Budget umfasst den Anfragevorgang. Das 5-sekündige connect-Budget schließt das Warten auf eine verfügbare Pool-Verbindung ein. Ein belegter Pool kann es daher verbrauchen, bevor ein neuer Socket geöffnet wird. Diese Unterscheidung ist wichtig, wenn Sie den einzelnen Aufruf zu nebenläufigen Prüfungen ausbauen.
trust_env=False hält die gezeigte Route explizit. aiohttp sucht standardmäßig nicht nach Proxy-Umgebungsvariablen; der Export einer solchen Variablen in einem anderen Terminal konfiguriert diesen Aufruf nicht. Wählen Sie trust_env=True nur, wenn die geerbte Prozessumgebung die gewünschte Routingrichtlinie ist.