一文了解requests基本和高级用法
编辑日期:2021-07-05
代码验证环境:python 3.7.10 + jupyter lab
操作系统:OSX 11.4
目录
- 一、请求
- 1.1 快速入门
- 1.2 在URL中传递GET参数
- 1.3 发送POST请求
- 1.3.1 一般情况
- 1.3.2 发送JSON
- 1.3.3 上传文件
- 1.3.3.1 单文件上传
- 1.3.3.2 多文件上传
- 1.3.3.3 大文件上传
- 二、响应消息
- 2.1 文本信息
- 2.2 二进制响应数据
- 2.3 JSON响应数据
- 三、headers
- 3.1 自定义请求header
- 3.2 查看响应header
- 四、COOKIES
- 4.1 查看响应cookies
- 4.2 设置请求cookies
- 五、重定向和访问历史
- 六、超时、错误及异常处理
- 6.1 超时
- 6.2 错误及异常处理
- 七、高级用法
- 7.1 会话保持:Session对象
- 7.2 代理
一、请求
1.1 快速入门
导入requests
库,使用各种方法请求:
# GET方法
r = requests.get('https://api.github.com/events')
# POST方法
r = requests.post('https://httpbin.org/post', data = {
'key':'value'})
# PUT, DELETE, HEAD and OPTIONS等方法
r = requests.put('https://httpbin.org/put', data = {
'key':'value'})
r = requests.delete('https://httpbin.org/delete')
r = requests.head('https://httpbin.org/get')
r = requests.options('https://httpbin.org/get')
请求成功后,requests
会返回Response
对象(以上代码片段中的r
),我们需要的各种信息都在这个对象中,如需要查看返回内容,用r.text
。
1.2 在URL中传递GET参数
我们可以在请求时,将含有参数的字典传给params
参数,实现传递GET参数
>>> payload = {
'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get('https://httpbin.org/get', params=payload)
>>> print(r.url)
https://httpbin.org/get?key2=value2&key1=value1
需要注意,参数字典如果有key的值为None
的,requests
不会将这个key传入URL参数。字典值也可以使用list
数据传入一组值:
>>> payload = {
'key1': 'value1', 'key2': None, 'key3': ['value2', 'value3']}
>>> r = requests.get('https://httpbin.org/get', params=payload)
>>> print(r.url)
https://httpbin.org/get?key1=value1&key3=value2&key3=value3
params
也支持一些元祖(tuples)构成的数组:
>>> payload = [('key1', 'value1'), ('key1', 'value2')]
>>> r = requests.get('https://httpbin.org/get', params=payload)
>>> print(r.url)
https://httpbin.org/get?key1=value1&key1=value2
1.3 发送POST请求
1.3.1 一般情况
一般情况下,我们可以在请求时,将含有参数的字典传给data
参数(注意区别GET参数params
),实现发送表单数据:
>>> payload = {
'key1': 'value1', 'key2': 'value2'}
>>> r = requests.post("https://httpbin.org/post", data=payload)
>>> print(r.text)
{
...
"form": {
"key2": "value2",
"key1": "value1"
},
...
}
data
也支持传入由多个元祖(tuples)构成的数组:
payload_tuples = [('key1', 'value1'), ('key1', 'value2')]
1.3.2 发送JSON
使用json
参数传递json格式数据,需要注意,当data
和files
不为空的时候,requests
会忽略json
参数。
>>> url = 'https://httpbin.org/post'
>>> payload = {
'some': 'data'}
>>> r = requests.post(url, json=payload)
>>> r.json()
{
'args': {
},
'data':