Requests,post請求參數 json&data


問題:在學習requests中,對公司的程序進行登錄測試,但是一直失敗。對比抓包發送的數據,發現同自己寫的發送的參數格式是不一樣的。

 

 

上圖為抓包的數據

 

 

 上圖為自己寫的登錄腳本,發送的數據

  可以看到自己寫的腳本request.body的內容則為a=1&b=2的這種形式,而抓包的request.body的內容則為'{"a": 1, "b": 2}'的這種形式

  百度后才知道post請求報文中既可以傳data,也可以傳json。並且data與json,既可以是str類型,也可以是dict類型。

一、Json

1.使用json參數,不管報文是str類型,還是dict類型如果不指定headers中content-type的類型,默認是:application/json。

二、DATA

1.使用data參數,報文是dict類型,如果不指定headers中content-type的類型,默認application/x-www-form-urlencoded,相當於普通form表單提交的形式,會將表單內的數據轉換成鍵值對,此時數據可以從request.POST里面獲取,而request.body的內容則為a=1&b=2的這種鍵值對形式。

注意:即使指定content-type=application/json,request.body的值也是類似於a=1&b=2,所以並不能用json.loads(request.body.decode())得到想要的值。

2. 使用data參數,報文是str類型,如果不指定headers中content-type的類型,默認application/json。
 
所以:
用data參數提交數據時,request.body的內容則為a=1&b=2的這種形式,
用json參數提交數據時,request.body的內容則為'{"a": 1, "b": 2}'的這種形式
 
先展示第一次自己寫的腳本,這個時候發送的內容是 phone=123456&password=123456&remember=true
 1 import requests
 2 
 3 Data = {"phone":"123456",
 4         "password":"123456",
 5         "remember":"true"}
 6 
 7 url_login = "http://192.168.1.108:8082/api/login"
 8 
 9 print(Data)
10 
11 r = requests.post(url_login, data=Data)
12 print(r.text)

 

這里只需要修改requests的參數請求類型

r = requests.post(url_login, json=Data)

修改之后發送的請求內容就和抓包的數據時一樣的了 {"phone": "123456", "password": "123456", "remember": "true"}

實現了正常登陸

 1 import requests
 2 
 3 Data = {"phone":"123456",
 4         "password":"123456",
 5         "remember":"true"}
 6 
 7 url_login = "http://192.168.1.108:8082/api/login"
 8 
 9 print(Data)
10 
11 r = requests.post(url_login, json=Data)
12 print(r.text)

 

 

 


免責聲明!

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



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