0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

プロキシー環境化でのpython httpx 利用時に留意点

0
Last updated at Posted at 2025-08-27

Abstract

python httpx を使用して通信エラーが発生し、その解決策を備忘録として残します。

会社などプロキシサーバーを使用している環境下のPCなどでhttpx をデフォルトのまま使用すると、うまく通信できない場合があります。

Introduction

私は外部ネットワークと遮断されたローカルネットワーク環境で動作させる業務システムおよびアプリ群を作ることがあります。

その際の業務システムはマイクロサービスアーキテクチャを採用することが多く、アプリ間通信を行います。

アプリのAPIとしてRestfulAPIを採用することが多いです。

今回、python のAPPを作るにあたり、 httpx を使用する実装を試みました。

私の業務環境では複数台のPCで開発環境、テスト環境、本番環境と使い分けています。

すると、一部の開発環境のPCで httpx を使った実装が通信エラーとなる事例が発生しました。

http://localhost に対して通信を試みても、通信エラーになるとう自体が発生しました。

調査したところ、python requestscurl, ブラウザ, JavaScript(TypeScript) を使った場合問題なく通信でましたが、httpx を使った場合のみ、プロキシーサーバーエラーになっていました。
httpx の仕様で知らないことがあると推測しました。

ネット検索やAIで調べてもよい一発で回答がえられなかったため、記事として残すことにします。

Conclusion

公式リファレンスを読むと、httpx はデフォルトで環境変数を使用する仕様のようです。
社内でプロキシーサーバーを利用している場合、会社から支給されているPCは環境変数にプロキシーサーバーを使用するように設定されている可能性があります。

つまり、 httpxが環境変数を読まないようにしてやればよいのです。

Client(AsyncClient)を使用する場合

httpx.Client(httpx.AsyncClient)の trust_env オプションを False にします。

import httpx


url = 'http://localhost:3000/api/...'
with httpx.Client(trust_env=False) as client:
    resp = client.get(url)
    # // 処理が続く

トップレベルの関数を使う場合

import httpx

url = 'http://localhost:3000/api/...'
httpx.get(url, trust_env=False)

社給のPCなど自分で設定していないPCの場合、知らない環境設定がされている可能性が高いので注意が必要です。

環境変数を変更するという方法も考えられますが、勝手にいじると怒られそうなので自重しました。

Reference

httpx 環境変数

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?