🌐

requests内部構造 — requests.get()が実際にやること

Session、PreparedRequest、HTTPAdapter、urllib3までの呼び出しチェーン

response = requests.get('https://api.example.com/data')

この一行の裏で起きること:

呼び出しチェーン

requests.get(url)
  → Session().request()   # 一時Session生成
    → PreparedRequest     # ヘッダー、Cookie、エンコーディング組立
      → HTTPAdapter.send() # アダプター選択
        → urllib3.PoolManager # コネクションプールから接続取得
          → socket.connect()  # 実際のTCP接続

なぜ知る必要があるか

requests.get()をループで100回呼ぶと毎回新しいTCP接続を作る。Sessionを直接作ればコネクションプールを再利用。

urllib3 — エンジン

requestsはHTTPプロトコル処理を全てurllib3に委任。コネクションプーリング、Keep-Alive、リトライ、SSL — 全てurllib3レベル。requestsはその上に「使いやすいAPI」を載せたもの。

HTTPAdapterで細かい制御

プールサイズ、リトライ回数/間隔、最大同時接続数を制御可能。

キーポイント

1

requests.get()は内部的に一時Sessionを作る

2

PreparedRequestでヘッダー/Cookie/エンコーディングを組立

3

HTTPAdapter → urllib3.PoolManager → socket.connect()で実際TCP接続

4

Sessionを直接作ればコネクションプール再利用で性能向上

ユースケース

APIクライアント — Session + HTTPAdapterでリトライ/タイムアウト/プール設定 クローラー — Sessionでクッキー/ヘッダーを維持しながら複数ページリクエスト