基于本身踩过的坑,百度以后整理的,以备后期忘记以后,回忆回忆。json
http协议规定post传输数据必须放在消息体里,但并未规定使用什么编码方式,常见的编码方式有四种:浏览器
一、application/x-www-form-urlencoded 浏览器的原生 form 表单,若是不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。app
其传参方式为 key=value&key=value&key=value.. 也就意味着是以字符串形式传输 post
1 import requests
from urllib import parse 2 url='xxxx' 3 str = 'key={"k1": "v1","k2": "k2"}&k2=v2'
data = parse.quote(str, safe='=&') # safe 为不转码字符,此例子为 =和& 不作转码 4 headers = {'Content-Type': 'application/x-www-form-urlencoded'} #headers必需要传 5 response = requests.post(url, data=data, headers=headers) 6 print(response.text)
二、multipart/form-data 使用表单上传文件时,必须让 form 的 enctyped 等于这个值编码
其传参方式为 files = {'name': (<filename>, <file object>,<content type>, <per-part headers>)} 若是filename 和 content-Type不写,那么响应模拟post的数据就不会有两者。url
1 data = { 2 'k1':(None, 'v1'), #filename设置为None 3 'k2':(None, 'v2') # 4 } 5 response = requests.post(url, files=data) #默认headers以multipart/form-data编码 6 print(response.text)
三、application/json 消息主体是序列化后的 JSON 字符串spa
其传参是标准的json格式,不作赘述code
四、text/xml 是一种使用 HTTP 做为传输协议,XML 做为编码方式的远程调用规范orm
还没有遇到,不作赘述xml