首页 文章

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

提问于
浏览
1

我无法在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 是第一个url, $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.

没有任何成功,我试图ctreate新的ServiceProxy对象 . 此外,我试图在wsdl definition的代码似乎指定api位置时立即修改Zeep Client self.wsdl 初始化 .

如何在python中使用非wsdl soap api?我可以使用Zeep编写一个调用非wsdl api的客户端吗?

Update: 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 回答

  • -2

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

    from suds.client import Client
    
    Client(
        url=<wsdl file path>,
        location=<authentication url>,
        username=user,
        password=password
    )
    

相关问题