Éin aiohttp-førespurnad gjennom ein HTTP-proxy
Send ein aiohttp-førespurnad gjennom HTTP-proxy utan autentisering, sjekk statusen og avslutt i ein tydeleg asynkron livssyklus.
For éin asynkron førespurnad gjennom ein HTTP-proxy utan autentisering, hald ruta på session.get(). Legg aiohttp til prosjektet om nødvendig:
uv add aiohttpByt ut dokumentasjonsadressa nedanfor med ditt HTTP-lyttepunkt eller ein kandidat frå lista over HTTP-proxyar. Det må tillate CONNECT til HTTPS-målet; eit endepunkt som berre støttar SOCKS, treng ein eigna koplar i staden for dette proxy-argumentet.
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())
Førespurnaden skriv ut HTTP-statusen og dei første 200 teikna av svarteksten. Ein 403 eller 429 er framleis eit svar du kan undersøkje her; kall response.raise_for_status() om appen skal gjere mislukka statusar til unntak. Dei asynkrone konteksthandterarane lukkar økta og svaret når blokkene er ferdige, òg ved unntak.
Det 15-sekund lange total-budsjettet dekkjer førespurnadsoperasjonen. Det 5-sekund lange connect-budsjettet omfattar venting på ei tilgjengeleg tilkopling frå poolen, så ein oppteken pool kan bruke det opp før ein ny socket blir opna. Skilnaden er viktig når du tilpassar eitt kall til samtidige kontrollar.
trust_env=False held den viste ruta uttrykkeleg. aiohttp finn ikkje proxy-miljøvariablar som standard; eksport av ein i ein annan terminal set ikkje opp dette kallet. Vel trust_env=True berre når det arva miljøet til prosessen er den tiltenkte rutingspolitikken.