【问题标题】:How to connect to webservice using suds?如何使用 suds 连接到 Web 服务?
【发布时间】:2012-02-28 12:28:13
【问题描述】:

我想连接到名为 e-conomic 的网络服务,以将我的网上商店中的数据与 e-conomic 簿记系统同步。但是我一开始就卡在如何开始连接。

我有一个电子经济帐户、一个用户名和一个密码,我安装了 suds 库来拨打电话:

>>> from suds.client import Client
>>> c = Client('https://www.e-conomic.com/secure/api1/EconomicWebService.asmx?WSDL')
>>>

然后呢?

文档是here,我想做的是创建一个新订单,如here 所述。

作为我应用一部分的代码才刚刚启动,我不知道如何在 SOAP 请求中指定我的帐户:

from suds.client import Client

class Economic(NewBaseHandler):

    def get(self):
        url = 'https://www.e-conomic.com/secure/api1/EconomicWebService.asmx?WSDL'
        client = Client(url)
        self.response.out.write('client: %s' % str(client))

你能告诉我如何进行吗?

【问题讨论】:

标签: python soap suds


【解决方案1】:

您必须使用Clientservice 方法调用网络服务。

>>> from suds.client import Client
>>> c = Client('https://www.e-conomic.com/secure/api1/EconomicWebService.asmx?WSDL')
>>> c.service.Account_Create(10, '20', 'ProfitAndLoss')
------------------------------------------------------------
Traceback (most recent call last):
  File "<ipython console>", line 1, in <module>
  File "/usr/lib/python2.7/site-packages/suds-0.3.6-py2.7.egg/suds/client.py", line 240, in __call__
    return target.call(*args, **kwargs)
  File "/usr/lib/python2.7/site-packages/suds-0.3.6-py2.7.egg/suds/client.py", line 379, in call
    return method(*args, **kwargs)
  File "/usr/lib/python2.7/site-packages/suds-0.3.6-py2.7.egg/suds/client.py", line 240, in __call__
    return target.call(*args, **kwargs)
  File "/usr/lib/python2.7/site-packages/suds-0.3.6-py2.7.egg/suds/client.py", line 422, in call
    return client.invoke(args, kwargs)
  File "/usr/lib/python2.7/site-packages/suds-0.3.6-py2.7.egg/suds/client.py", line 480, in invoke
    result = self.send(msg)
  File "/usr/lib/python2.7/site-packages/suds-0.3.6-py2.7.egg/suds/client.py", line 511, in send
    result = self.failed(binding, e)
  File "/usr/lib/python2.7/site-packages/suds-0.3.6-py2.7.egg/suds/client.py", line 562, in failed
    r, p = binding.get_fault(reply)
  File "/usr/lib/python2.7/site-packages/suds-0.3.6-py2.7.egg/suds/bindings/binding.py", line 226, in get_fault
    raise WebFault(p, faultroot)
WebFault: Server raised fault: 'Economic.Api.Exceptions.AuthenticationException(E02250): User is not authenticated. Access denied. {id=131496672}'

我收到此错误是因为用户未通过身份验证。他们可能会通过某些服务或某些密钥对用户进行身份验证。您需要该密钥,然后才能调用服务。

【讨论】:

  • 好的,我可以验证并运行您发布的代码:&gt;&gt;&gt; c.service.Account_Create(10, '20', 'ProfitAndLoss') 输出:(AccountHandle){ Number = 10 }
【解决方案2】:
#Works only in 2.7 Python. Does not work in Python 3.0 version 

from suds.client import Client
from suds.sax.text import Raw

client = Client('https://www.e-conomic.com/secure/api1/EconomicWebService.asmx?WSDL')
xml = Raw('--Paste your entire xml --')
Response_XML= (client.service.MethodName(__inject={'msg':xml}))

-- 您将在 Response_XML 变量中获得所有 xml 响应

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多