HTTPプロキシ経由でaiohttpのリクエストを1回送る
認証不要のHTTPプロキシを使ってaiohttpでリクエストし、ステータスを確認して、明示的な非同期ライフサイクル内で終了します。
認証不要のHTTPプロキシ経由で非同期リクエストを1回送るなら、経路はsession.get()に指定します。必要ならaiohttpをプロジェクトに追加してください。
uv add aiohttp下の文書用アドレスを、自分のHTTP待ち受け先かHTTPプロキシ一覧の候補へ置き換えます。その接続先はHTTPSの宛先へのCONNECTを許可している必要があります。SOCKS専用の接続先には、このproxy引数ではなく適切なコネクターが必要です。
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())
リクエストはHTTPステータスと応答テキストの先頭200文字を表示します。403や429も、ここでは内容を確認できる応答として扱われます。失敗ステータスを例外にしたいアプリではresponse.raise_for_status()を呼んでください。非同期コンテキストマネージャーはブロック終了時にセッションと応答を閉じ、例外発生時も同様です。
15秒のtotal枠はリクエスト処理を対象とします。5秒のconnect枠にはプール内の空き接続を待つ時間も含まれるため、プールが混雑していると、新しいソケットを開く前に使い切る場合があります。単発の呼び出しを並行チェックへ拡張する際に重要な違いです。
trust_env=Falseにより、ここで示す経路を明示的に保ちます。aiohttpは既定ではプロキシ環境変数を読み取りません。別のターミナルで変数をエクスポートしても、この呼び出しの設定にはなりません。プロセスが継承した環境を意図した経路方針として使う場合にのみ、trust_env=Trueを選んでください。