方法一:requests发送get、post请求,使用urllib包
import json
import urllib
import requests
data = bytes(urllib.parse.urlencode{'hello':'world'}), encoding='utf8')
res = urllib.request.urlopen(url,params=data)
print(response.read())
# 第二种
# res = requests.request("get",url, params=data)
# obj = json.loads(res.content.decode())
# obj = json.loads(res.text)
方法二:web service发送请求,使用suds-jurko包
1、发送数据
url = "http://IP:PORT/*************?wsdl"
# 获取本机名称、ip地址
hostname = socket.gethostname()
local_ip = socket.gethostbyname(hostname)
client = Client(MES_URL, faults=False, timeout=15)
# 定义Header。
# MySoapHeader需与系统B名称相同,详情看文章末
header = client.factory.create('MySoapHeader')
header.UserId = HEADER_UseID # 用户名
header.Password = HEADER_PASSWORD # 密码
header.Token = HEADER_TOKEN # 令牌
header.IP = local_ip # 本机IP
client.set_options(soapheaders=header)
# 准备接口请求报文
with open('./send_data.xml', 'r',encoding='utf-8') as f:
data = f.read()
# Interface 为接口方法,使用自己的
result = client.service.Interface(data)
# 接口返回结果: (<HTTPStatus.OK: 200>, <?xml version="1.0" encoding="UTF-8" ?><RESP_PARAM><PUB_INFO><RESULT>1</RESULT><DESC>success</DESC></PUB_INFO></RESP_PARAM>)
2、B系统返回数据解析
from libs.encoder import Xml2Dict
# 用的自己二次封装的libs下的encoder.py哦
xd = Xml2Dict()
dict_result = xd.parse(result[1])
# dict_result 结果:
# {'RESP_PARAM': {'PUB_INFO': {'RESULT': '1', 'DESC': 'success'}}}
2.1、xml转字典时bytes类型的处理
重写def _make_dict()方法,判断传入数据是否为bytes。
# 这是encoder.py中的方法
class Xml2Dict(XML2Dict):
def _make_dict(self, tag, value, attr=None):
"""Generate a new dict with tag and value
If attr is not None then convert tag name to @tag
and convert tuple list to dict
"""
if isinstance(value, bytes):
value = value.decode("utf-8")
ret = {tag: value}
# Save attributes as @tag value
if attr:
atag = '@' + tag
a_attr = {}
for k, v in attr.items():
a_attr[k] = v
ret[atag] = a_attr
del atag
del a_attr
return ret
** 方法2引用来自
链接:http://blog.youkuaiyun.com/zyfdroid/article/details/106364946