一、Post請求,data里面嵌套字典
Requests發Post請求,data里面嵌套字典的常見形式如下:
info = {
"appid": "123",
"checkin_type": "6",
"role": "1",
"stunum": "15812086122"
}
form_data = {
'Data': '%s' % info,
'MsgType': 'APP_SEND_CARDCHECKIN_BYSTUNUM'
}
result = requests.post(url, data=form_data)
需提別注意的是,一定要用 'Data': '%s' % info
格式化輸出這種形式把嵌套的字典傳給Data
,如果直接將info
當做value
賦值給Data
,即,'Data': info
,請求是不成功的
{'error_code': '505', 'error_msg': 'Data格式不正確參數驗證失敗'}
通常當post傳入data參數時候,請求格式一般為Content-Type: application/x-www-form-urlencoded
格式,按照官方的說法數據字典在發出請求時會自動編碼為表單形式
,所以是不是因為這個原因,data中嵌套的字典需要處理成字符串才能正常發post,這點暫存疑惑???
二、Post常見用的請求方式
- 傳參為json格式
通過抓包后,轉換為raw格式,可以看到Content-Type: application/json
import requests
import josn
payload = {
'a': 1
'b': 2
}
# 方法一,將payload轉為josn格式
payload = josn.jump(payload)
res = requests.post(url, data=payload)
# 方法二,直接用josn參數傳遞
res = requests.post(url, josn=payload)
- 傳參為form-data格式
通過抓包后,轉換為raw格式,可以看到Content-Type: application/x-www-form-urlencoded
,此時直接把字典payload傳給參數data即可,此處就需要注意的是,如果payload里面嵌套字典,切記要先將其轉為字符串形式,然后再入參
import requests
payload = {
'a': 1
'b': 2
}
res = requests.post(url, data=payload)
- 傳參帶文件
post上傳文件,首先需要構造file,格式如下,fp為文件路徑,然后將構造好的file傳給files即可
import requests
file = {
'file_name': open(fp, 'rb')
}
res = requests(url, files=file)
OK!
~
~
~
不積跬步,無以至千里