urllib.request
標準ライブラリに含まれている。
import urllib.request
resp = urllib.request.urlopen("http://example.com")
return type(resp)
<class 'http.client.HTTPResponse'>
requests
ほぼデファクトとなっている。ただし非同期IOには対応していない。
import requests
resp = requests.get("http://example.com")
return type(resp)
<class 'requests.models.Response'>
aiohttp
https://docs.aiohttp.org/
非同期IO用のHTTPライブラリ。 サーバーとクライアントの両方を提供している。
import asyncio
import aiohttp.client
async def main():
async with aiohttp.ClientSession() as client:
return await client.get("http://example.com")
return type(asyncio.run(main()))
<class 'aiohttp.client_reqrep.ClientResponse'>
TODO trace_configオプションを有効にする
SCHEDULED:
CLOCK: [2022-08-16 Tue 18:19]–[2022-08-16 Tue 21:10] => 2:51
リクエストの送信ログを取得する方法としてtrace_configsオプションを提供している。 ここではその挙動を確認する。
import asyncio
from aiohttp import ClientSession, TraceConfig
async def on_request_end(session, trace_config_ctx, params):
print(session, trace_config_ctx, params)
default_trace_config = TraceConfig()
default_trace_config.on_request_end.append(on_request_end)
async def main():
async with ClientSession(trace_configs=[default_trace_config]) as client:
resp = await client.get("http://example.com")
print(resp)
asyncio.run(main())
httpx
同期および非同期IOの両方をサポートしている こちらはクライアントの両方を提供している。 同期および非同期IOの両方で似たような記述ができることをコンセプトにしている。
import asyncio
import httpx
async def main():
async with httpx.AsyncClient() as client:
return await client.get('http://example.com')
return type(asyncio.run(main()))
<class 'httpx.Response'>