前言
post請求相對於get請求多一個body部分,body部分常見的數據類型有以下四種(注意是常見的,並不是只有4種)
- application/x-www-form-urlencoded
- application/json
- text/xml
- multipart/form-data
本篇講xml這種類型的body案例,如何用python去實現
text/xml
1.首先要確定post請求的body部分類型是xml格式,可以用fiddler抓包工具,抓到請求后點開raw。看到body部分格式如下

<?xml version=“1.0” encoding = “UTF-8”?>
<COM>
<REQ name="上海-悠悠">
<USER_ID>yoyoketang</USER_ID>
<COMMODITY_ID>123456</COMMODITY_ID>
<SESSION_ID>absbnmasbnfmasbm1213</SESSION_ID>
</REQ>
</COM>
使用fiddler模擬
1.先不着急去寫python代碼,先在工具上請求一次,看能不能請求成功,點開fiddler工具上composer菜單

2.將xml數據直接復制到右下方Request Body部分,然后點右上角Execute就能執行了
python實現
1.xml格式的body部分直接寫成一個字符串類型就行了,遇到換行的字符串,在后面加個反斜杠

2.body參數用data去接收傳入,要是遇到編碼問題報錯,就對body部分encode下再傳入
# coding:utf-8
import requests
# 作者:上海-悠悠 QQ交流群:588402570
url = "http://httpbin.org/post"
# python3字符串換行,在右邊加個反斜杠
body = '<?xml version="1.0" encoding = "UTF-8"?>' \
'<COM>' \
'<REQ name="上海-悠悠">' \
'<USER_ID>yoyoketang</USER_ID>' \
'<COMMODITY_ID>123456</COMMODITY_ID>' \
'<SESSION_ID>absbnmasbnfmasbm1213</SESSION_ID>' \
'</REQ>' \
'</COM>'
# 遇到編碼報錯時候,對body進行encode
r = requests.post(url, data=body.encode("utf-8"))
print(r.text)
3.運行結果
{"args":{},"data":"<?xml version=\"1.0\" encoding = \"UTF-8\"?><COM><REQ name=\"\u4e0a\u6d77-\u60a0\u60a0\"><USER_ID>yoyoketang</USER_ID><COMMODITY_ID>123456</COMMODITY_ID><SESSION_ID>absbnmasbnfmasbm1213</SESSION_ID></REQ></COM>","files":{},"form":{},"headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Connection":"close","Content-Length":"192","Host":"httpbin.org","User-Agent":"python-requests/2.18.4"},"json":null,"origin":"116.228.224.250","url":"http://httpbin.org/post"}
讀xml數據
1.xml格式的數據寫到代碼里面,不太直觀,后期維護也不方便,可以把xml格式數據單獨拿出來寫到一個文件里,再用open函數去讀取

2.新建一個body1_xml文件,寫入內容如下:
<?xml version="1.0" encoding = "UTF-8"?>
<COM>
<REQ name="上海-悠悠">
<USER_ID>yoyoketang</USER_ID>
<COMMODITY_ID>123456</COMMODITY_ID>
<SESSION_ID>absbnmasbnfmasbm1213</SESSION_ID>
</REQ>
</COM>

3.用open函數去讀xml內容
# coding:utf-8
import os
# 作者:上海-悠悠 QQ交流群:588402570
curpath = os.path.dirname(os.path.realpath(__file__))
xmlpath = os.path.join(curpath, "body1_xml")
with open(xmlpath, encoding="utf-8") as fp:
body = fp.read()
# 讀取xml文件
print(body)

3.參考代碼:
# coding:utf-8
import requests
# 作者:上海-悠悠 QQ交流群:588402570
url = "http://httpbin.org/post"
# xml格式body
with open("body1_xml", encoding="utf-8") as fp:
body = fp.read()
print(body)
# 遇到編碼報錯時候,對body進行encode
r = requests.post(url, data=body.encode("utf-8"))
print(r.text)
---------------------------------python接口自動化完整版-------------------------
全書購買地址 https://yuedu.baidu.com/ebook/585ab168302b3169a45177232f60ddccda38e695
作者:上海-悠悠 QQ交流群:588402570
也可以關注下我的個人公眾號:yoyoketang

