Zeep は WSDL を読む前にプロキシを必要とする
リモートの WSDL から Client を構築する前に、Requests セッションと Zeep Transport を作成します。
リモートの WSDL から Zeep Client を構築すると、そのドキュメントとその import が即座に取得されることがあります。Client がすでにサービス記述の読み込みを試みた後にプロキシを設定するのではなく、先に Transport を構成してください。
from requests import Session
from zeep import Client
from zeep.transports import Transport
session = Session()
session.proxies.update({
"http": "http://proxy.example.net:8080",
"https": "http://proxy.example.net:8080",
})
transport = Transport(
session=session,
timeout=10,
operation_timeout=30,
)
client = Client(wsdl_url, transport=transport)
wsdl_url はサービス記述の実際の URL です。そのサービスとその import が公開されており、公開プロキシが許可されている場合、HTTP プロキシ一覧がセッションのプロキシ URL の候補を提供します。構成したセッションは後続の SOAP 操作のために生かしておき、その作業が終わったら閉じてください。
Transport.timeout は WSDL と XSD の読み込みを制御します。operation_timeout はサービス操作のために行われる HTTP リクエストを制御します。したがって、Client 構築中のメタデータのタイムアウトは、後でメソッド呼び出しがタイムアウトするのとは別の段階です。
この例では、Requests の環境統合は有効なままです。環境のプロキシ値が明示的に必要な経路と競合する場合は、session.trust_env=False を使い、必要な CA バンドルと認証設定を明示的に指定してください。
初期化がまだ失敗する場合は、インポートされたドキュメントの URL を確認してください。最上位の WSDL は正常に読み込めても、インポートされた schema が別のホスト名や接続先プロトコルを使っていることがあります。