前言
post请求相对于get请求多一个body部分,body部分常见的数据类型有以下四种(注意是常见的,并不是只有4种)
- application/x-www-form-urlencoded
- application/json
- text/xml
- multipart/form-data
本篇讲xml这种类型的body案例,如何用python去实现
1.打开fiddler抓包工具,使用python发送一个post请求
import requests s=requests.session() s.post("http://httpbin.org/post")
2.查看fiddler中显示该条请求;选中该请求,点击【Composer】,History中双击该请求,Request Body中添加如下内容;
<?xml version=“1.0” encoding = “UTF-8”?> <COM> <REQ name="武汉会"> <USER_ID>huihui</USER_ID> <COMMODITY_ID>8888</COMMODITY_ID> <SESSION_ID>good</SESSION_ID> </REQ> </COM>
3.点击右上角的【Execute】就执行了。
4.查看fiddler中刚刚执行的post请求,body部分类型是xml格式,点击raw,看到body部分格式如下。
python实现
1.xml格式的body部分直接写成一个字符串类型就行了,遇到换行的字符串,在后面加个反斜杠()
2.body参数用data去接收传入,要是遇到编码问题报错,就对body部分encode下再传入;
import requests s=requests.session() bb='<?xml version=“1.0” encoding = “UTF-8”?> <COM> <REQ name="武汉会"> <USER_ID>huihui</USER_ID> <COMMODITY_ID>8888</COMMODITY_ID> <SESSION_ID>good</SESSION_ID> </REQ> </COM>' r=s.post("http://httpbin.org/post",data=bb.encode("utf-8")) #print(r.text)#显示结果含有unicode码 print(r.text.encode('utf-8').decode('unicode_escape'))
3.运行结果
读取xml数据
1.xml格式的数据写到代码里面,不太直观,后期维护也不方便,可以把xml格式数据单独拿出来写到一个文件里,再用open函数去读取。
pycharm中新建xml方式,在当前.py脚本的目录,New——File——弹出New File窗口。
输入名字,点击【ok】,弹出的Register New File Type Association窗口中选择【XML】,点击【ok】,完事。
2.新建的xml中输入如下图内容
<?xml version=“1.0” encoding = “UTF-8”?> <COM> <REQ name="武汉会"> <USER_ID>huihui</USER_ID> <COMMODITY_ID>8888</COMMODITY_ID> <SESSION_ID>good</SESSION_ID> </REQ> </COM>
3.使用open函数取读取xml内容,参考代码
import requests s=requests.session() with open("bbo_xml",encoding="utf-8") as fp: body=fp.read() print(body) print() #换行 r=s.post("http://httpbin.org/post",data=body.encode("utf-8")) print(r.text.encode('utf-8').decode('unicode_escape'))
4.运行结果
C:UsersAdministratorAppDataLocalProgramsPythonPython37python.exe D:/Python0811/OPMS/uppic/a.py <?xml version=“1.0” encoding = “UTF-8”?> <COM> <REQ name="武汉会"> <USER_ID>huihui</USER_ID> <COMMODITY_ID>8888</COMMODITY_ID> <SESSION_ID>good</SESSION_ID> </REQ> </COM> { "args": {}, "data": "<?xml version=“1.0” encoding = “UTF-8”?> <COM> <REQ name="武汉会"> <USER_ID>huihui</USER_ID> <COMMODITY_ID>8888</COMMODITY_ID> <SESSION_ID>good</SESSION_ID> </REQ> </COM>", "files": {}, "form": {}, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Content-Length": "181", "Host": "httpbin.org", "User-Agent": "python-requests/2.22.0", "X-Amzn-Trace-Id": "Root=1-5f2ac996-7439b920e4df2a90472d1230" }, "json": null, "origin": "183.95.51.5", "url": "http://httpbin.org/post" } Process finished with exit code 0