一、Content-type常用的几种类型
Content-type: 指内容类型编码,互联网媒体类型 也叫MIME类型
它是http请求头和响应中的字段,作为请求头时告诉服务端发送的数据类型,以及响应时返回的数据类型
-
application/x-www-form-urlencoded
使用表单形式提交,一般是post请求 -
multipart/form-data
多媒体类型,用来传输文件,图片等 -
application/json
使用JSON格式传输文件,是前后端传输数据常用的一种方式
二、requests 不同参数发送请求时携带的 Content-type 示例
1.params参数
payload = {'key1': 'value1', 'key2': ['value2', 'value3']}
r = requests.get('https://httpbin.org/get', params=payload)
print(r.url)
# params 参数会将请求参数放到地址栏中
> https://httpbin.org/get?key1=value1&key2=value2&key2=value3
2. json 参数
payload = {'key1': 'value1', 'key2': 'value2'}
使用 json 会把参数 payload 以application/josn形式传输
resp = requests.request("post", url=url, headers=headers, json=payload)
3.data 参数
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post('https://httpbin.org/post', data=payload)
data 可以是字典 也可以是 字节序列,文件对象
requests 会根据传递的参数不同来进行解析
4.files 参数
files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
字典类型,传输文件
三 requests 上传文件
1.方式1:
不构造请求头,发送请求时requests默认构造headers的Content-Type
url="www.baidu.com"
files={
'file': ('mouse.jpg',
open('../img/mouse.jpg', 'rb'),
'image/jpeg')
}
resp = requests.request("post", url=url, files=files)
2.方式2
构造请求头,将Content-Type 设置为 application/image/jpeg
data = MultipartEncoder(
fields={'file': ('mouse.jpg',
open('../img/mouse.jpg', 'rb'),
'image/jpeg')}
)
# 构造请求头
headers["Content-Type"] = data.content_type
resp = requests.request("post", url=url, headers=headers, data=data)
3.上传 excel 文件
url = 'https://httpbin.org/post'
files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
r = requests.post(url, files=files)
r.text