Python调用WebService接口
刚接触一个工作项目,需要用python调用java开发的第三方WebService接口。
导入模块
python使用suds模块来调用WebService接口进行开发
from suds.client import Client #导入suds客户端模块
调用接口
url = 'http://x.x.x.x:xxxx/xxxx?wdsl' #获取第三方接口URL,结尾要加上?wsdl,可以直接在浏览器中访问
c = Client(url=url) #实例化Client并传入url
print c
#print c 返回结果,主要包含该接口的使用方法和类型
Service ( userService ) tns="http://x.x.x.x.x/" #结果隐藏
Prefixes (2)
ns0 = ".x.x.x.x" #结果隐藏
ns2 = "http://.x.x.x.x/" #结果隐藏
Ports (1):
(...)
Methods (11):
#显示方法名称,由于项目隐私,结果隐藏
#可以直接用过Client.Service来调用这里面的方法
Types (24):
#类型
调用接口方法
result = c.service.方法名(*args) #可根据实际情况传递参数
调用接口报错
No handlers could be found for logger "suds.client"
Traceback (most recent call last):
File "C:\Users\Administrator\Desktop\project\smp\add_wifi_whitelist.py", line 28, in <module>
result = c.service.queryUsers()
File "F:\Python27\lib\site-packages\suds\client.py", line 542, in __call__
return client.invoke(args, kwargs)
File "F:\Python27\lib\site-packages\suds\client.py", line 602, in invoke
result = self.send(soapenv)
File "F:\Python27\lib\site-packages\suds\client.py", line 649, in send
result = self.failed(binding, e)
File "F:\Python27\lib\site-packages\suds\client.py", line 702, in failed
r, p = binding.get_fault(reply)
File "F:\Python27\lib\site-packages\suds\bindings\binding.py", line 265, in get_fault
raise WebFault(p, faultroot)
suds.WebFault: Server raised fault: 'An error was discovered processing the <wsse:Security> header'
这里报错原因主要是由于在CXF服务端加入了Security安全信息,所以在Soap头部需要写入Security认证信息
导入suds认证模块wsse
from suds.wsse import *
配置认证信息
security = Security()
token = UsernameToken(username, password)
security.tokens.append(token)
c.set_options(wsse=security)
其他需要身份认证的调用
from suds.transport.http import HttpAuthenticated
# 1.
client = Client(url=wsdl_url, username=username, password=password)
# 2.
t = HttpAuthenticated(username=username, password=password)
client = Client(url=url, transport=t)