最近在工做中,遇到一種奇葩的接口,它的參數數據是經過xml,進行傳遞的,不要大驚小怪的,林子大了什麼鳥都有,每一個人的思路想法不同,開發的接口也是各式各樣的,若是想要統一的話,必須是提早團隊已經作好溝通定好規則,這樣就像在產品線上生成一python
樣規格大小一致。就不會出現前邊的問題了,若是出現了怎麼辦?並且項目進度比較急,沒有時間修改,一期上線就只能湊合着用這組接口了,那麼做爲QA的你,會不會測試,如何用代碼、工具實現呢???等等問題跟着就產生了。json
前邊就有介紹到有關:post請求相對於get請求多一個body部分,body部分常見的數據類型有如下四種(注意是常見的,並非只有4種)瀏覽器
本篇就來給各位看官和小夥伴們來說xml這種類型的body案例,如何用python去實現,因爲公司的制度的保密性,因此公司的接口就不能在這裏給小夥伴們演示了,我給小夥伴們模擬了一個相似的接口,來給小夥伴們講解一下思路,但願小夥伴們在遇到的時候不至於app
慌了神,不知道從何處入手,其實說到底,說破大天了,它的本質仍是一個接口,那就仍是按照接口的那套思路往上邊靠,這樣就思路不至於太偏,也會走不多的彎路。好了就不囉嗦了,直接進入今天的正題吧。composer
一、首先要肯定post請求的body部分類型是xml格式,能夠用fiddler抓包工具、postman、jemter、Google瀏覽器接口調試插件來進行缺洞,這裏我是用fiddler抓包工具來肯定的。看到body部分格式以下:函數
二、body裏xml的參數:工具
<?xml version=「1.0」 encoding = 「UTF-8」?> <COM> <REQ name="北京-宏哥"> <USER_ID>bjhongge</USER_ID> <COMMODITY_ID>123456</COMMODITY_ID> <SESSION_ID>absbnmasbnfmasbm1213</SESSION_ID> </REQ> </COM>
PS:!!!先不要着急的去用代碼實現,而是先用工具請求一次,看是否能夠請求是否能夠成功。不要一開始就抨擊怕啦的敲了半天,運行代碼,傻眼了,運行結果和股市同樣行情大漲,一片紅色。結果你費了半天勁調試代碼,也沒查出錯誤。一問開發,開發用工具一試,一臉淫笑,而後笑呵呵的告訴你:額。。。,這個接口有點小問題,我須要調整一下下,這個時候是否是有一種想把開發接口的人痛揍一頓衝動,可是仔細想一想仍是本身的問題,若是一開始你就用工具模擬一下,出現問題立馬找開發人員確認溝通,就不會有後面的劇情了。這種場景通常是萌新、小白可能會遇到的。好了,如下給小夥伴們列舉了兩種方法,固然了你也能夠用其餘方法模擬,條條大路通羅馬,便可。post
一、將url、請求方法、參數在插件中填寫好,之後直接點擊「Send」,便可學習
一、點開fiddler工具上composer菜單測試
二、填寫URL、選擇請求方法、將xml數據直接複製到右下方Request Body部分,而後點右上角Execute就能執行了
一、宏哥演示環境:
(1)python37 (2)PyCharm 2018.3.5 x64 (3)操做系統win10
二、其實很簡單的,難而不會,會而不難。將xml格式的body部分直接寫成一個字符串類型就好了,遇到換行的字符串,在後面加個反斜槓
三、body參數用data去接收傳入,要是遇到編碼問題報錯,就對body部分encode下再傳入
四、運行結果
五、參考代碼
1 # coding=utf-8 2 # 1.先設置編碼,utf-8可支持中英文,如上,通常放在第一行 3 4 # 2.註釋:包括記錄建立時間,建立人,項目名稱。 5 ''' 6 Created on 2019-5-29 7 @author: 北京-宏哥 QQ交流羣:984942724 8 Project:學習和使用 發xml格式參數的post請求 9 ''' 10 # 3.導入模塊 11 import requests 12 url = "http://httpbin.org/post" 13 14 # python3字符串換行,在右邊加個反斜槓 15 body = '<?xml version="1.0" encoding = "UTF-8"?>' \ 16 '<COM>' \ 17 '<REQ name="北京-宏哥">' \ 18 '<USER_ID></USER_ID>' \ 19 '<COMMODITY_ID>123456</COMMODITY_ID>' \ 20 '<SESSION_ID>absbnmasbnfmasbm1213</SESSION_ID>' \ 21 '</REQ>' \ 22 '</COM>' 23 24 # 遇到編碼報錯時候,對body進行encode 25 r = requests.post(url, data=body.encode("utf-8")) 26 print(r.text)
一、xml格式的數據寫到代碼裏面,不太直觀,後期維護也不方便,能夠把xml格式數據單獨拿出來寫到一個文件裏,再用open函數去讀取
二、新建一個body1_xml文件,寫入內容以下
三、參考內容
<?xml version=「1.0」 encoding = 「UTF-8」?> <COM> <REQ name="北京-宏哥"> <USER_ID>bjhongge</USER_ID> <COMMODITY_ID>123456</COMMODITY_ID> <SESSION_ID>absbnmasbnfmasbm1213</SESSION_ID> </REQ> </COM>
四、用open函數去讀xml內容
五、運行結果
六、參考代碼
1 # coding=utf-8 2 # 1.先設置編碼,utf-8可支持中英文,如上,通常放在第一行 3 4 # 2.註釋:包括記錄建立時間,建立人,項目名稱。 5 ''' 6 Created on 2019-5-29 7 @author: 北京-宏哥 QQ交流羣:984942724 8 Project:學習和使用 發xml格式參數的post請求 9 ''' 10 # 3.導入模塊 11 import requests 12 url = "http://httpbin.org/post" 13 14 # python3字符串換行,在右邊加個反斜槓 15 body = '<?xml version="1.0" encoding = "UTF-8"?>' \ 16 '<COM>' \ 17 '<REQ name="北京-宏哥">' \ 18 '<USER_ID></USER_ID>' \ 19 '<COMMODITY_ID>123456</COMMODITY_ID>' \ 20 '<SESSION_ID>absbnmasbnfmasbm1213</SESSION_ID>' \ 21 '</REQ>' \ 22 '</COM>' 23 24 with open('body1.xml',encoding='utf-8') as fp: 25 body = fp.read() 26 print(body)
嘿嘿,今天到這裏有關發xml格式參數的post請求就給小夥伴們介紹完了,看起來是否是至關簡單啊,可是在工做中遇到相似的問題,要靈活應用,不要生搬硬套。