使用SUDS测试WSDL
有没有人知道好的SUDS教程?我想在WSDL文件上进行测试,但找不到相关的信息。SUDS和SOAPy差别大吗?有人推荐用它来对WSDL文件中的功能进行简单测试吗?
我听说SOAPy在Python 2.6及以上版本中不再支持,这是真的吗?
我有一个WSDL文件,已经输入了:
from suds.client import Client
client = Client('http://10.51.54.50/ptz.wsdl')
client.service.GetNode()
我遇到了这个错误:
in open
response = self._open(req, data)
File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib2.py", line 407, in _open
'_open', req)
File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib2.py", line 367, in _call_chain
result = func(*args)
File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib2.py", line 1146, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib2.py", line 1121, in do_open
raise URLError(err)
urllib2.URLError: <urlopen error [Errno 111] Connection refused>
有没有人知道为什么会这样?
我可以通过浏览器连接到这个文件。我已经安装了所有的suds包。还需要其他的设置吗?
3 个回答
2
在我的情况下,这真是个愚蠢的错误(就像其他任何bug一样)。
我用来初始化我的服务的URL大概是这样的:
Uri httpUri = new Uri("http://localhost:8000/CalculatorService");
我可以从和服务在同一台机器上运行的Python客户端访问这个服务。我可以在本地和远程机器上用浏览器查看wsdl(Web服务描述语言)。但是,当我尝试从远程机器访问这个服务时,却出现了连接被拒绝的错误。奇怪的是,在wireshark这个工具中,我能看到服务把wsdl发回给了远程客户端。
在浪费了几个小时后,我启用了日志记录。
logging.getLogger('suds.client').setLevel(logging.DEBUG)
logging.getLogger('suds.transport').setLevel(logging.DEBUG)
logging.getLogger('suds.xsd.schema').setLevel(logging.DEBUG)
logging.getLogger('suds.wsdl').setLevel(logging.DEBUG)
日志显示suds(一个Python库)从服务器下载了wsdl,但之后它试图连接到localhost:8000。这就解释了连接被拒绝的错误。我只是把WCF服务器上的URI改成了:
Uri httpUri = new Uri("http://192.168.0.1:8000/CalculatorService");
这样就解决了我的问题。
2
“连接被拒绝”意味着服务器没有响应。你能在浏览器里或者用curl命令访问一下 http://10.51.54.50/ptz.wsdl 吗?如果不能,先确保SOAP服务正常运行,然后再试一次。
17
Suds使用起来非常简单。
from suds.client import Client
client = Client("http://example.com/foo.wsdl")
client.service.someMethod(someParameter)
someMethod
是WSDL中描述的方法名称。