バックグラウンド
Python 2.7.3でSOAPクライアントを構築し、Canonicalが提供するsuds0.4.1ライブラリを使用しています。サーバーはHTTPS経由の基本認証を使用しています。
問題
WSDLを取得する場合でも、サーバーで認証を渡すことはできません。次のエラーが発生します。
suds.transport.TransportError:HTTPエラー401:無許可
解決とコードの試み
sudsのドキュメントに記載されている両方の認証方法を試しましたが、それでも上記のclient = Client(url, ...)
行でエラーが発生します。クレデンシャルとWebブラウザで接続する機能を確認しました。これは正常に機能します。
wsdl_url
、、username
を宣言した後password
、私は試しました:
client = Client(url=wsdl_url, username=username, password=password)
# as well as:
t = HttpAuthenticated(username=username, password=password)
client = Client(url=wsdl_url, transport=t)
# and even:
t = HttpAuthenticated(username=username, password=password)
t.handler = urllib2.HTTPBasicAuthHandler(t.pm)
t.urlopener = urllib2.build_opener(t.handler)
client = Client(url=wsdl_url, transport=t)
最後の1つは、少なくとも、 sudsを使用したHTTP認証に関する別の質問でWSDLURLから応答を取得しているようです。
その他の注意事項
私が使用しているので、この質問はこの同様の質問とは異なります。
from suds.transport.https import HttpAuthenticated
# not:
# from suds.transport.http import HttpAuthenticated
トレースバックから、client = Client(url, ...)
呼び出しは明らかにsuds.transport.https.pyにヒットします。
File "/usr/lib/python2.7/dist-packages/suds/client.py", line 112, in __init__ self.wsdl = reader.open(url)
File "/usr/lib/python2.7/dist-packages/suds/reader.py", line 152, in open d = self.fn(url, self.options)
File "/usr/lib/python2.7/dist-packages/suds/wsdl.py", line 136, in __init__ d = reader.open(url)
File "/usr/lib/python2.7/dist-packages/suds/reader.py", line 79, in open d = self.download(url)
File "/usr/lib/python2.7/dist-packages/suds/reader.py", line 95, in download fp = self.options.transport.open(Request(url))
File "/usr/lib/python2.7/dist-packages/suds/transport/https.py", line 60, in open return HttpTransport.open(self, request)
File "/usr/lib/python2.7/dist-packages/suds/transport/http.py", line 64, in open raise TransportError(str(e), e.code, e.fp)
私は何が欠けていますか?