python接口自動化二(發送post請求)


前言

一個http請求包括三個部分,為別為請求行,請求報頭,消息主體,類似以下這樣:

  • 請求行
  • 請求報頭
  • 消息主體

HTTP協議規定post提交的數據必須放在消息主體中,但是協議並沒有規定必須使用什么編碼方式。

服務端通過是根據請求頭中的Content-Type字段來獲知請求中的消息主體是用何種方式進行編碼,再對消息主體進行解析。

具體的編碼方式包括:

application/x-www-form-urlencoded 

最常見post提交數據的方式,以form表單形式提交數據。

application/json 

以json串提交數據。

multipart/form-data 

一般使用來上傳文件。

三種編碼請求實例

1.提交Form表單

 Reqeusts支持以form表單形式發送post請求,只需要將請求的參數構造成一個字典,然后傳給requests.post()的data參數即可。

2.提交json串

錯誤寫法:json格式data參數不能傳送字典,不然運行會報錯

headers可以用fiddler去抓取

即使寫上了 'Content-Type':'application/json; charset=UTF-8' ,返回依然出錯了,原因就在於 你的請求實體的格式錯了,服務端無法解碼

正確寫法

1.import json用json.dumps將字典轉換成json格式

r = requests.post(url=url,data=json.dumps(data),headers=headers)  

2傳參數時直接使用json,這個方法headers里面不用再傳"Content-Type":"application/json; charset=UTF-8"

r = requests.post(url=url,json=jdata,headers=headers)  

3.上傳文件

 上傳文件在爬蟲中使用的很少,不過還是使用requests講解一下使用方式。

Content-Type類型為multipart/form-data,以multipart形式發送post請求,只需將一文件傳給requests.post()的files參數即可。還是以http://httpbin.org/post 為例,

代碼如下:

url = 'http://httpbin.org/post'
files = {'file': open('upload.txt', 'rb')}
r = requests.post(url, files=files)
print(r.text)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM