【发布时间】:2018-12-06 17:04:38
【问题描述】:
我是 SOAP 请求和一般编程的新手。我想访问需要持有者令牌授权才能使用其服务之一的 WSDL。
调用pyhton -mzeep *WSDL_url*后我想访问的服务信息:
getInfo(param1: xsd:string, param2: xsd:anySimpleType, param3: xsd:anySimpleType) -> out: ns0:ResponseCurve[]
首先我收到令牌:
import zeep
user = 'my_user'
userpass = 'my_pass'
token = client.service.getAuthToken(user,userpass)
那我想请求需要三个参数的服务getInfo:
my_info = client.service.getInfo('param1', 'param2', 'param3')
我知道提供商每次想要访问此服务时都需要令牌,并且在文档中说明了有关身份验证的标头:
授权:承载 eyJhbGciOiJIUzI1N[...]
我试图在_soapheaders 中将标题作为dict 传递,但不起作用。
我可以通过强制请求访问服务:
def get_response_from_provider(token, param1, param2, param3):
url = "WSDL url"
headers = {'Authorization': 'Bearer ' + token,
'content-type': 'text/xml'}
body = """
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsl="uri">
<soapenv:Header/>
<soapenv:Body>
<wsl:getInfo>
<param1>""" + param1 + """</param1>
<param2>""" + param2 + """ </param2>
<param3>""" + param3 + """ </param3>
</wsl:getInfo>
</soapenv:Body>
</soapenv:Envelope>"""
response = requests.post(url, data=body, headers=headers)
print("Info recieved...")
return response
但是我想通过 SOAP 客户端访问服务。
这是他们在 PHP 中添加令牌的方式:
$soap->soapClient->_stream_context = stream_context_create([
'http' => [
'header' => sprintf('Authorization: Bearer %s', $authTokenResponse->token)
]
]);
关于如何在 Python 中将带有 Token 的标头添加到客户端请求的任何想法?
我在 SOF 中看到过很多关于 SOAP+Python 的帖子,但无法解决问题。即使使用 Zeep 文档,我也无法使其工作。
谢谢
【问题讨论】:
-
xml请求返回500