我无法在Zeep python客户端中为SOAP API验证用户身份。我有两个网址:
1)http://credotrade.stg-tradingcrm.com:8093/mex
- 它指定wsdl服务。我可以使用Zeep命令python -mzeep
来调用它来检查所有可用的操作。
2)https://credotrade.stg-tradingcrm.com:8094/CrmServiceBasic
- 这是一个身份验证网址,提供使用登录名和密码保护的api位置。
检查此api的可用工作php客户端我发现SoapClient收到SoapClient($wsdl, $location, $username, $password)
形式的参数,其中$wsdl
是第一个网址,$location
是第二个网址一,$username
和$password
是我的用户名和密码。关注php文档
在非WSDL模式下,必须设置location和uri选项,其中location是要将请求发送到的SOAP服务器的URL,而uri是SOAP服务的目标名称空间
如果我直接调用wsdl url,我会收到安全错误:zeep.exceptions.Fault: An error occurred when verifying security for the message.
没有任何成功,我试图创建新的ServiceProxy对象。此外,一旦wsdl definition的代码似乎指定了api位置,我就尝试修改Zeep Client self.wsdl
初始化。
如何在python中使用非wsdl soap api?我可以使用Zeep编写一个调用非wsdl api的客户端吗?
更新 Php文档似乎具有误导性。我在python-zeep github遇到问题How to create client with specific endpoints?。这意味着location url只是一个与非wsdl模式无关的身份验证URL。 Zeep的作者建议可以解决authentification url创建新的ServiceProxy对象的问题:
service = client.create_service(
'{http://my-target-namespace-here}myBinding',
'http://my-endpoint.com/acceptance/')
任何人都可以解释如何通过create_service
方法调用身份验证网址吗?
答案 0 :(得分:-2)
可以创建能够使用suds调用身份验证URL的soap客户端。
from suds.client import Client
Client(
url=<wsdl file path>,
location=<authentication url>,
username=user,
password=password
)