一、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!
~
~
~
不积跬步,无以至千里