python - 访问网络服务

标签 python web-services soap suds

我一直在尝试编写一个客户端来访问工作中的 Web 服务。我已经使用 SUDS 和 ZSI 与 Python 成功编写了客户端。我已经使用 NetBeans 6.9 协助编写了一些 Java 客户端。成功的客户都在访问我在互联网上找到的免费网络服务。

事实证明,我工作需要连接的客户端并不那么友好。它确实需要身份验证:

http://www.cmicdataservices.com/datacenter/service.asmx

如果我获取此 Web 服务的 WSDL 描述,我会看到有六种方法。

Methods (6):
    CheckIfAuthorized()
    DataProcessed()
    GetCurrentDataVer1()
    GetID()
    LogDSCStatus(xs:string _clientname, xs:string _status, xs:string _errormsg)
    ResetNewDataReferences()

也返回了 70 种类型。其中之一是身份验证类型。

在我的 Python 和 Java 客户端中,我已经能够创建这些身份验证对象,但无法做任何进一步的事情。

从 WSDL 中,没有任何迹象表明有任何方法可以使用可用的内容创建这些身份验证对象。 Web 服务的供应商确实提供了一个使用 Adob​​e Air 构建的客户端,我可以对其进行测试以确保我可以对 Web 服务进行身份验证并使用它。

这是我第一次不得不与 Web 服务交互,我不确定这里是否遗漏了什么。谁能告诉我关于如何使用此服务进行身份验证,我是否明显遗漏了什么?

这是我编写的 Python 客户端及其输出。如果您取消注释打印客户端行,您可以看到 WSDL 信息的 pretty-print 输出。

#!/usr/bin/python

from suds.client import Client

url='http://www.cmicdataservices.com/datacenter/service.asmx?wsdl'
client = Client(url)


#print client
print client.service.CheckIfAuthorized()

输出:

Traceback (most recent call last):
  File "CMICTest.py", line 23, in <module>
    print client.service.CheckIfAuthorized()
  File "/usr/local/lib/python2.6/dist-packages/suds-0.4-py2.6.egg  /suds/client.py",      line 542, in __call__
 return client.invoke(args, kwargs)
  File "/usr/local/lib/python2.6/dist-packages/suds-0.4-py2.6.egg/suds/client.py",  line 602, in invoke
  result = self.send(soapenv)
  File "/usr/local/lib/python2.6/dist-packages/suds-0.4-py2.6.egg/suds/client.py",  line 649, in send
  result = self.failed(binding, e)
  File "/usr/local/lib/python2.6/dist-packages/suds-0.4-py2.6.egg/suds/client.py",  line 702, in failed
  r, p = binding.get_fault(reply)
 File "/usr/local/lib/python2.6/dist-packages/suds-0.4-py2.6.egg/suds/bindings /binding.py", line 265, in get_fault
raise WebFault(p, faultroot)
suds.WebFault: Server raised fault: 'Server was unable to process request. ---> Object reference not set to an instance of an object.'

最佳答案

尝试使用 wireshark(或只是调试)来捕获正在运行的 Adob​​e Air 客户端的完整请求和响应。然后捕获您生成的客户端的请求/响应。比较这两个请求并确定您没有创建和添加到客户端的对象。

关于python - 访问网络服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5524394/

相关文章:

java - 如何在 java web 客户端中实现基本操作系统风格的控制台?

java - 连接到 web 服务导致 com.sun.xml.internal.ws.client.ClientTransportException : The server sent HTTP status code 200: OK

jquery - Phonegap 捕获图像然后将其上传到 REST Web 服务

python - 使用 SUDS 将多个参数传递给 SOAP web 服务

soap - JMeter 3.2 中不存在 SOAP/XML-RPC 采样器

javascript - Django View 运行 python 脚本

python - 调用函数时返回键错误

Python:定义具有依赖属性的类

python - HTTP 错误 429 : Too Many Requests by python geopy

java - 将 null 传递给 java @WebMethod