SUDS SOAP クライアントを使用して Web サービス URL を指定するにはどうすればよいですか。Client コンストラクターで WSDL パスが指定されていることがはっきりとわかりますが、Web サービスの URL を変更したくない場合はどうすればよいでしょうか?
3 に答える
Sudsは複数のサービスまたは複数のポート(あるいはその両方)でWSDLをサポートしており、作業内容に関する詳細な情報がなくても、これがあなたが探しているものだと推測しています。Client
インスタンスがどのように見えるかなど、より詳細な情報を提供すると、この質問に答えやすくなります。
を正常に構築しClient
たらprint
、利用可能なサービス、メソッド、ポート、およびタイプを確認できます。
次の例は、sudsのドキュメントから直接引用したものです。
sudsサイトからの例:
from suds.client import Client
url = 'http://www.thomas-bayer.com/axis2/services/BLZService?wsdl'
client = Client(url)
print client
これを出力します:
Suds - version: 0.3.7 build: (beta) R550-20090820
Service (BLZService) tns="http://thomas-bayer.com/blz/"
Prefixes (1)
ns0 = "http://thomas-bayer.com/blz/"
Ports (2):
(soap)
Methods (1):
getBank(xs:string blz, )
(soap12)
Methods (1):
getBank(xs:string blz, )
Types (5):
getBankType
getBankResponseType
getBankType
getBankResponseType
detailsType
Service (OtherBLZService) tns="http://thomas-bayer.com/blz/"
Prefixes (1)
ns0 = "http://thomas-bayer.com/blz/"
Ports (2):
(soap)
Methods (1):
getBank(xs:string blz, )
(soap12)
Methods (1):
getBank(xs:string blz, )
Types (5):
getBankType
getBankResponseType
getBankType
getBankResponseType
detailsType
各サービスにはさまざまな方法でアクセスできますが、ここでは、メソッドによって修飾された各サービスとは異なるポートを示します。
## service: BLZService, port: soap12, method: getBank
client.service['BLZService']['soap12'].getBank()
## service: OtherBLZService, port: soap, method: getBank
client.service['OtherBLZService']['soap'].getBank()
それはあなたが取り組んでいるようなものですか?もしそうなら、彼らのドキュメントをご覧ください。あなたはそれで十分だと思います。そうでない場合は、質問にできるだけ詳細を追加して、より多くの作業を行えるようにすることを検討してください。
次の 2 つの方法で、クライアントを別のエンドポイントに向けることができます。
1) client.set_options(location=' http://path/to/your/wsdl ') または 2) クライアントの clone() メソッドを使用します。次に、set_options() を再度使用します。上記の #1 と同じですが、1 つではなく 2 つのクライアントを使用することになります。
この後者の方法は、クライアント オブジェクトの軽量なクローンを作成するクリーンな方法です。それらは解析された wsdl を共有し、set_options() で設定したオプションのみが異なります。
私は両方の方法を使用していますが、どちらも非常にうまく機能します。
-マット
異なる URL ごとに新しい Client オブジェクトを作成する必要があると思います。