python模拟webservice客户端

前言:

最近工作中需要和第三方进行数据对接,对方的服务端是webservice接口,因此需要使用python模拟webservice客户端,这里简要记录一下模拟过程!

相关说明:

具体开发流程是先在本地开发自测完成,然后在线上调试。所以服务端也需要我们自己模拟!

  • 客户端编写:使用python的requests模块;
  • 服务端模拟:使用SoapUI工具
  • SoapUI模拟服务端:

    1.加载wsdl文件
    # 发送给webservice的请求体数据 send_webservice_data = '''<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.inf.oa.ztesoft.com"> <soapenv:Header/> <soapenv:Body> <ser:Login> <ser:UserName>username</ser:UserName> <ser:Password>password</ser:Password> </ser:Login> </soapenv:Body> </soapenv:Envelope>''' class WebService(object): # 响应节点名称(通过该名称拿到响应数据) rtn_node_name = "LoginReturn" def __init__(self): # 请求url self.url = "http://127.0.0.1:8088/mockOaOrderServicePortSoapBinding" # 构造响应头 self.headers = { "User-Agent": "Python Post", "Content-type": "text/xml; charset=UTF-8", "Content-length": "%d" % len(send_webservice_data), "SOAPAction": "" def send_request(self, send_data): """发送webservice请求,获取响应信息""" response = requests.post(self.url, headers=self.headers, data=send_data, verify=False) xml_data = response.content return xml_data def parse_data(self, xml_data): 1.解析响应数据:响应数据是xml格式的,这里需要解析xml获取响应数据 2.响应数据样例: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.inf.oa.ztesoft.com"> <soapenv:Header/> <soapenv:Body> <ser:LoginResponse> <LoginReturn>{"success":true, "msg":"登录成功"}</LoginReturn> </ser:LoginResponse> </soapenv:Body> </soapenv:Envelope> dom = XD.parseString(xml_data) # 通过节点名称,获取响应数据 rtn_data = dom.getElementsByTagName(self.__class__.rtn_node_name)[0].childNodes[0].nodeValue return rtn_data def main(self): # 获取响应的xml数据 xml_data = self.send_request(send_webservice_data) # 解析响应的xml数据:获取响应结果 rtn_data = self.parse_data(xml_data) print rtn_data except Exception as e: logger.error(e.message) logger.error(traceback.format_exc())