requests と httpx による HTTP リクエスト
Web ページを取得し、リダイレクト、セッション、ヘッダーを処理します。
「requests と httpx による HTTP リクエスト」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。
requestsライブラリ
requests は標準的な同期HTTPライブラリです。シンプルで実績があり、スクリプトや一度きりのAPI呼び出しに最適です。
# pip install requests
import requests
r = requests.get("https://api.github.com/users/octocat")
print(r.status_code) # 200
print(r.json()["login"]) # octocatクエリパラメーターとヘッダー
クエリパラメーターは params= で、カスタムヘッダーは headers= で渡します。
import requests
r = requests.get(
"https://api.example.com/search",
params={"q": "python", "page": 1},
headers={"Authorization": "Bearer my-token"}
)
print(r.url) # full URL with query stringJSONボディでPOST
json= を使ってJSONデータを送信します。requestsが Content-Type: application/json を自動的に設定します。
import requests
r = requests.post(
"https://api.example.com/users",
json={"name": "Alice", "email": "alice@example.com"}
)
print(r.status_code) # 201
print(r.json())セッションオブジェクト
複数のリクエスト間でヘッダー、Cookie、コネクションプールを維持するには、requests.Session を使います。
import requests
with requests.Session() as s:
s.headers.update({"Authorization": "Bearer token"})
users = s.get("https://api.example.com/users").json()
profile = s.get("https://api.example.com/me").json()タイムアウトと再試行
必ずタイムアウトを設定します。自動的に再試行するには、HTTPAdapter と urllib3.util.retry.Retry を使います。
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
s = requests.Session()
retry = Retry(total=3, backoff_factor=1)
s.mount("https://", HTTPAdapter(max_retries=retry))
r = s.get("https://api.example.com/data", timeout=5)エラー処理
r.raise_for_status() を呼び出すと、4xx/5xxレスポンスに対して HTTPError を発生させられます。
import requests
try:
r = requests.get("https://api.example.com/data")
r.raise_for_status()
data = r.json()
except requests.HTTPError as e:
print(f"HTTP error: {e.response.status_code}")
except requests.ConnectionError:
print("Network unreachable")ファイルのダウンロード
大きなファイルをダウンロードするときは、stream=True でストリーミングし、すべてのデータがメモリに読み込まれるのを防ぎます。
import requests
with requests.get("https://example.com/large.zip", stream=True) as r:
r.raise_for_status()
with open("large.zip", "wb") as f:
for chunk in r.iter_content(chunk_size=8192):
f.write(chunk)httpx — 最新の非同期HTTP
httpx はrequestsと同じAPIを備えていますが、非同期処理に対応しています。FastAPIアプリや非同期ワークフローで使用します。
# pip install httpx
import httpx
# Synchronous:
r = httpx.get("https://httpbin.org/get")
print(r.json())
# Asynchronous:
import asyncio
async def main():
async with httpx.AsyncClient() as c:
r = await c.get("https://httpbin.org/get")
print(r.json())
asyncio.run(main())httpx AsyncClient
コネクションプールを利用するため、複数のリクエストで1つの AsyncClient を共有します。起動時に作成し、終了時に閉じます。
import httpx, asyncio
CLIENT: httpx.AsyncClient | None = None
async def startup():
global CLIENT
CLIENT = httpx.AsyncClient(timeout=10)
async def shutdown():
await CLIENT.aclose()認証ヘルパー
requestsとhttpxは、どちらも認証ヘルパーに対応しています。Basic認証には auth=(user, pass) を、トークン認証にはカスタム Auth クラスを使います。
import httpx
class BearerAuth(httpx.Auth):
def __init__(self, token): self.token = token
def auth_flow(self, request):
request.headers["Authorization"] = f"Bearer {self.token}"
yield request
async with httpx.AsyncClient(auth=BearerAuth("my-token")) as c:
r = await c.get("https://api.example.com/me")テストでのHTTPモック
テストでHTTP呼び出しをモックするには、respx(httpx用)または responses(requests用)を使います。
# pip install respx
import httpx, respx, asyncio
@respx.mock
async def test_api():
respx.get("https://api.example.com/users").mock(
return_value=httpx.Response(200, json=[{"id":1}])
)
async with httpx.AsyncClient() as c:
r = await c.get("https://api.example.com/users")
assert r.json() == [{"id": 1}]確認問題
response.raise_for_status() は何をしますか。
復習
同期HTTPには requests を使います。非同期処理が必要な場合は httpx を使います。必ずタイムアウトを設定し、コネクションの再利用にはセッションを使い、raise_for_status() を呼び出し、大きなファイルはストリーミングします。テストでは respx または responses でHTTPをモックします。
よくある質問
「requests と httpx による HTTP リクエスト」レッスンは無料ですか?
はい。「requests と httpx による HTTP リクエスト」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。
「requests と httpx による HTTP リクエスト」で何を学びますか?
Web ページを取得し、リダイレクト、セッション、ヘッダーを処理します。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Python Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「requests と httpx による HTTP リクエスト」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPython Academyレッスンでコードを書いて実行できますか?
はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- requests と httpx による HTTP リクエスト
- BeautifulSoup による HTML の解析
- Scrapy スパイダーの作成
- JavaScript とスクレイピング対策への対応