如何在python zeep中调用soap api而不使用wsdl(非wsdl模式)?使用用户和密码身份验证调用位置网址

时间:2017-06-28 08:27:52

标签: php python soap wsdl zeep

我无法在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方法调用身份验证网址吗?

1 个答案:

答案 0 :(得分:-2)

可以创建能够使用suds调用身份验证URL的soap客户端。

from suds.client import Client

Client(
    url=<wsdl file path>,
    location=<authentication url>,
    username=user,
    password=password
)