gpt4 book ai didi

Python SOAP 客户端,使用 suds 的 WSDL 调用为 HTTP 基本身份验证提供传输错误 401 未授权

转载 作者:太空狗 更新时间:2023-10-29 20:19:06 25 4
gpt4 key购买 nike

背景

我正在使用 python 2.7.3 构建一个 SOAP 客户端,并使用 Canonical 提供的 suds 0.4.1 库。服务器正在使用基于 HTTPS 的基本身份验证。

问题

无法在服务器上通过身份验证,甚至无法访问 WSDL。我收到以下错误:

suds.transport.TransportError: HTTP Error 401: Unauthorized

尝试解析和代码

我已经尝试了 suds documentation 中描述的两种身份验证方法,但仍然在 client = Client(url, ...) 行出现上述错误。我已确认凭据和网络浏览器连接能力,工作正常。

在声明wsdl_urlusernamepassword 之后,我尝试了:

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)

最后一个似乎至少从 another question about HTTP authentication with suds 中的 WSDL URL 得到了响应.

其他说明

这个问题不同于这个similar question因为我正在使用:

from suds.transport.https import HttpAuthenticated
# not:
# from suds.transport.http import HttpAuthenticated

并且从 Traceback 来看,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)

我错过了什么?

最佳答案

suds 没有将授权 header 添加到请求中,所以我手动设置了它:

import base64

# code excluded for brevity

base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
authenticationHeader = {
"SOAPAction" : "ActionName",
"Authorization" : "Basic %s" % base64string
}
client = Client(url=wsdl_url, headers=authenticationHeader)

关于Python SOAP 客户端,使用 suds 的 WSDL 调用为 HTTP 基本身份验证提供传输错误 401 未授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11742494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com