Python-webservice接口调用、xml解析及踩坑(一)

前几天试了下在postman上用http post方式调用webservice接口,结果发现也是可以的,然后就想到了在Python中用requests是否可行,于是就有了这篇笔记。

1、headers设置

headers = {
    'Content-Type': "text/xml",
    'SOAPAction': "application/soap+xml;charset=utf-8"
    }

2、数据准备,发送请求,由于用到的是项目地址,屏蔽下;

      请求报文记得用<!CDATA[]]> 包起来

url = ""
payload = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" " \
          "xmlns:zj=\"http://**.****.****.com\">" \
          "<soapenv:Header/>" \
          "<soapenv:Body> " \
          "<zj:kHZX4OAXml>" \
          "<![CDATA[你的xml请求数据]]>" \
          "</zj:kHZX4OAXml> " \
          "</soapenv:Body>" \
          "</soapenv:Envelope>"
response = requests.request("POST", url, data=data, headers=headers)

3、数据解析

1)将响应结果字符串转换成xml对象

from xml.dom.minidom import parseString

xml_obj = parseString(response.text)

2) 得到集合

collection = xml_obj.documentElement

3)根据集合获取指定标签内容

return_str = collection.getElementsByTagName("kHZX4OAXmlReturn")

4)将xml字符串转换成xml

result_xml = parseString(return_data)

5)利用XML2Dict模块转成字段,需要安装pip install xml2dict

from encoder import XML2Dict

x = XML2Dict()

parse_dict = x.parse(return_data)

 

4、踩坑:有时我们会碰到一些接口返回结果是bytes数据类型,需要利用byte的decode()进行解码操作

 

如果我们选择自己调用接口解析代码中做处理的话,我们还得将转换后的dict 循环判断并处理,从源码可以看到转换成dict字典调用的是encoder.py中_make_dict()  ,不建议直接修改该文件哦,一般我会选择拷贝文件到自己目录然后再做修改,项目中导入自己修改过的这个文件,再引入就好。

5、但我更多的是利用suds来进行webservice接口的调用,实现起来较为简单

具体细节我放在下一篇笔记中 (地址):利用suds进行webservice接口的调用

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页