suds 是个好东西,轻便,主要是体积够小,依赖包也小,可以满足小脚本的需要。
现在最新的suds版本是0.4 ,好像已经不再更新了,不过依旧好用。
上这个网址下载,本人下的是tar包自己本地进行编译
https://pypi.python.org/pypi/suds/0.4
Python2的可以下载tar包后,解压,进入解压的目录 suds-0.4
在cmd运行语句 python setup.py install
如果没什么的问题的话 在cmd 运行语句 pip list 就知道成功没了。
可惜我的电脑是Python3
毫无悬念的报错了
Traceback (most recent call last):
File "setup.py", line 20, in <module>
import suds
File "C:\Users\Administrator\Desktop\suds-0.4\suds-0.4\suds\__init__.py", line
154, in <module>
import client
ModuleNotFoundError: No module named 'client'
后来查了一下
Python3 用的这个suds-jurko
https://pypi.python.org/pypi/suds-jurko/0.6
安装方法跟Python2一样。
如果安装完后 import 失败找不到suds库的话,把压缩包的suds,suds.egg-info放到Python目录的\Lib\site-packages目录下,就不会报错了。
开始来点代码吧。
这个网址有很多webservice服务,我随便用了个天气的来试了一下
http://www.webxml.com.cn/zh_cn/web_services.aspx
from suds.client import Client
client = Client('http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl')#腾讯QQ在线状态WEB服务
print(client) #看看这个service有什么方法可以用
Suds ( https://fedorahosted.org/suds/ ) version: 0.6
Service ( qqOnlineWebService ) tns="http://WebXml.com.cn/"
Prefixes (0)
Ports (2):
(qqOnlineWebServiceSoap)
Methods (1):
qqCheckOnline(xs:string qqCode)
Types (0):
(qqOnlineWebServiceSoap12)
Methods (1):
qqCheckOnline(xs:string qqCode)
Types (0):
接口有两个,方法就是qqCheckOnline()
所以方法调用就可以这样
from suds.client import Client
client = Client('http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl')
result=client.service.qqCheckOnline("543318638")
print (result)
就是这么简单。其实我觉得suds最好用的地方是设置。
from suds.client import Client
client = Client('http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl')
print (client.options)
Definitions:
cache: classes=(<class 'suds.cache.Cache'>,), default=<suds.cache.NoCache object at 0x00000000025784A8>
documentStore: classes=(<class 'suds.store.DocumentStore'>,), default=<suds.store.DocumentStore object at 0x00000000029A9EF0>
extraArgumentErrors: classes=(<class 'bool'>,), default=True
faults: classes=(<class 'bool'>,), default=True
transport: classes=(<class 'suds.transport.Transport'>,), default=None
service: classes=(<class 'int'>, <class 'str'>), default=None
port: classes=(<class 'int'>, <class 'str'>), default=None
location: classes=(<class 'str'>,), default=None
soapheaders: classes=*, default=()
wsse: classes=(<class 'suds.wsse.Security'>,), default=None
doctor: classes=(<class 'suds.xsd.doctor.Doctor'>,), default=None
xstq: classes=(<class 'bool'>,), default=True
prefixes: classes=(<class 'bool'>,), default=True
retxml: classes=(<class 'bool'>,), default=False
prettyxml: classes=(<class 'bool'>,), default=False
autoblend: classes=(<class 'bool'>,), default=False
cachingpolicy: classes=(<class 'int'>,), default=0
plugins: classes=(<class 'list'>, <class 'tuple'>), default=[]
nosend: classes=(<class 'bool'>,), default=False
unwrap: classes=(<class 'bool'>,), default=True
Content:
('cache', <suds.cache.ObjectCache object at 0x0000000002C077B8>)
('documentStore', <suds.store.DocumentStore object at 0x00000000029A9EF0>)
('extraArgumentErrors', True)
('faults', True)
('transport', <suds.transport.https.HttpAuthenticated object at 0x0000000002C07320>)
('service', None)
('port', None)
('location', None)
('soapheaders', ())
('wsse', None)
('doctor', None)
('xstq', True)
('prefixes', True)
('retxml', False)
('prettyxml', False)
('autoblend', False)
('cachingpolicy', 0)
('plugins', [])
('nosend', False)
('unwrap', True)
Linked:
Definitions:
proxy: classes=(<class 'dict'>,), default={}
timeout: classes=(<class 'int'>, <class 'float'>), default=90
headers: classes=(<class 'dict'>,), default={}
username: classes=(<class 'str'>,), default=None
password: classes=(<class 'str'>,), default=None
Content:
('proxy', {})
('timeout', 90)
('headers', {})
('username', None)
('password', None)
Linked:
Definitions:
cache: classes=(<class 'suds.cache.Cache'>,), default=<suds.cache.NoCache object at 0x00000000025784A8>
documentStore: classes=(<class 'suds.store.DocumentStore'>,), default=<suds.store.DocumentStore object at 0x00000000029A9EF0>
extraArgumentErrors: classes=(<class 'bool'>,), default=True
faults: classes=(<class 'bool'>,), default=True
transport: classes=(<class 'suds.transport.Transport'>,), default=None
service: classes=(<class 'int'>, <class 'str'>), default=None
port: classes=(<class 'int'>, <class 'str'>), default=None
location: classes=(<class 'str'>,), default=None
soapheaders: classes=*, default=()
wsse: classes=(<class 'suds.wsse.Security'>,), default=None
doctor: classes=(<class 'suds.xsd.doctor.Doctor'>,), default=None
xstq: classes=(<class 'bool'>,), default=True
prefixes: classes=(<class 'bool'>,), default=True
retxml: classes=(<class 'bool'>,), default=False
prettyxml: classes=(<class 'bool'>,), default=False
autoblend: classes=(<class 'bool'>,), default=False
cachingpolicy: classes=(<class 'int'>,), default=0
plugins: classes=(<class 'list'>, <class 'tuple'>), default=[]
nosend: classes=(<class 'bool'>,), default=False
unwrap: classes=(<class 'bool'>,), default=True
Content:
('cache', <suds.cache.ObjectCache object at 0x0000000002C077B8>)
('documentStore', <suds.store.DocumentStore object at 0x00000000029A9EF0>)
('extraArgumentErrors', True)
('faults', True)
('transport', <suds.transport.https.HttpAuthenticated object at 0x0000000002C07320>)
('service', None)
('port', None)
('location', None)
('soapheaders', ())
('wsse', None)
('doctor', None)
('xstq', True)
('prefixes', True)
('retxml', False)
('prettyxml', False)
('autoblend', False)
('cachingpolicy', 0)
('plugins', [])
('nosend', False)
('unwrap', True)
之前找了很多文档都不知道怎么设置超时限制,自己想着直接把option打出来不就知道有什么可以设置了吗
from suds.client import Client
client = Client('http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl')
client.set_options(timeout=100)#这里单位是秒哦
result=client.service.qqCheckOnline("543318638")
先写着这么多吧。。。