写在前面
在使用requests发送post请求时,会遇到不同的表单类型,比较常见的是application/x-www-form-unlencoded,直接传递字典即可,有时会遇到multipart/form-data和Request Payload类型,只要做简单的处理即可。
form-data类型
import requests
def get_form_data(data:dict) -> tuple:
data_files = []
for key in data.keys():
if not isinstance(data[key],list):
data_files.append((key,(None,data[key],'multipart/form-data')))
else:
for i in data[key]:
data_files.append((key,(None,i,'multipart/form-data')))
return tuple(data_files)
# 如果有多个同名参数则写成列表形式
data = {'a','a','b':'b','c':['1','2','c']}
req = requests.post(url,files = get_form_data(data))
注:requests会帮你处理boundary分隔符,如果服务器需要指定的分隔符,则要做额外的处理。
from urllib3 import encode_multipart_formdata
data = get_form_data(data)
# 在此替换你的分隔符
boundary='----WebKitFormBoundaryKPjN0GYtWEjAni5F'
m = encode_multipart_formdata(data, boundary=boundary)
response = requests.post(url,
# 调用encode_multipart_formdata处理后要以data进行提交
data=m[0],
# 在headers中指定你的分隔符
headers={'Content-Type': "multipart/form-data; "+boundary})
Payload类型
此类型的处理比较简单,使用json.dumps处理一下参数字典即可。