最近由于业务需求,需要实现python Webservice的服务以及接口调用。服务端代码可自行百度,这里主要描述客户端以及我遇到的HTTP身份验证的问题,不多说直接上代码。
from suds.client import Client
from suds.transport.http import HttpAuthenticated
import base64
import urllib2
# 一:无需身份验证的简单调用
url = "http://localhost:8899/?wsdl"
client = Client(url) # 可以print client进行相关信息查看
client.service.methodName(*args) # 方法调用
req = str(client.last_sent()) # 保存请求报文,因为返回的是一个实例,所以要转换成str
response = str(client.last_received()) # 保存返回报文,返回的也是一个实例
# 二:需要身份验证的调用
# 1.
client = Client(url=wsdl_url, username=username, password=password)
# 2.
t = HttpAuthenticated(username=username, password=password)
client = Client(url=url, transport=t)
# 3.
t = HttpAuthenticated(username=username, password=password)
t.handler = urllib2.HTTPBasicAuthHandler(t.pm) # 这种我的报错了,t.pm告知我没这个对象
t.urlopener = urllib2.build_opener(t.handler)
client = Client(url=wsdl_url, transport=t)
# 4.
base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
authenticationHeader = {
"SOAPAction" : "ActionName",
"Authorization" : "Basic %s" % base64string
}
client = Client(url=wsdl_url, headers=authenticationHeader)
这是我针对身份验证做的一些资料搜集、汇整。