選んだホストにプロキシトランスポートを割り当て、クライアントの残りには直接接続トランスポートを明示します。

import httpx

direct = httpx.HTTPTransport(trust_env=False)
proxied = httpx.HTTPTransport(
    proxy="http://203.0.113.10:8080",
    trust_env=False,
)

with httpx.Client(
    transport=direct,
    mounts={"all://example.com": proxied},
    trust_env=False,
    timeout=15,
) as client:
    response = client.get("https://example.com/")
    print(response.status_code)

    other = client.get("https://example.org/")
    print(other.status_code)

文書用プロキシアドレスを、利用サービスまたはHTTPプロキシ一覧の目的のHTTPエンドポイントに置き換えます。ここではexample.comがマウントを使い、example.orgが既定の直接接続を使います。両方の呼び出しが重要です。プロキシ側のホストで成功しただけではフォールバック経路を確認できません。

マッチ条件効果
all://example.com接続先のスキームを問わず、指定したホストそのもの。
サブドメイン別途選ぶ必要がある。対象に含めるなら、対応するワイルドカードを意図的に使う。
パスマウントが選ぶのはスキーム、ホスト、必要に応じたポートのパターンであり、URLパスではない。
別ホストへのリダイレクトリダイレクト追従を有効にすると、新しいURLでマッチ判定を行い、直接接続のフォールバックを使う場合がある。

例ではクライアントと両方のトランスポートで環境設定の読み取りを無効にしています。応用時に別の広範なプロキシルールや一致するマウントがあると、結果が変わる可能性があります。環境変数のCA設定に依存する構成では、その信頼設定を明示するか適切な読み取り方針を残し、知らないうちに失わないようにしてください。

端末全体のプロキシ設定変更は不要です。経路確認には、目的のプロキシ経由ホストと、意図的に選んだフォールバック用ホストの両方を含めます。

関連記事