requests库核心解读:构建高效安全的网络请求脚本(实战必备)
发布时间: 2024-10-04 09:10:23 阅读量: 37 订阅数: 27
![requests库核心解读:构建高效安全的网络请求脚本(实战必备)](https://res.cloudinary.com/practicaldev/image/fetch/s--wDQic-GC--/c_imagga_scale,f_auto,fl_progressive,h_420,q_auto,w_1000/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dte10qten91kyzjaoszy.png)
# 1. requests库简介与安装配置
Python的requests库是专注于易用性和简洁性的HTTP库,是网络请求的瑞士军刀。相比于旧式的urllib库,requests使得代码更加直观和易读。它支持多种HTTP操作,包括GET、POST、PUT、DELETE以及HEAD等,并能自动处理HTTP头部信息、连接保持、SSL证书验证等复杂的细节问题。
## 1.1 安装requests库
要开始使用requests库,首先需要在Python环境中进行安装。通常,可以使用pip包管理器来安装:
```bash
pip install requests
```
一旦安装完成,我们就可以在Python脚本中导入它:
```python
import requests
```
## 1.2 简单配置requests库
安装并导入requests库后,通常不需要任何额外的配置即可使用。但在某些情况下,可能需要配置代理、会话保持、超时时间等参数,以便更好地控制请求行为。下面是一个简单的示例:
```python
# 配置会话,以便重复使用连接
session = requests.Session()
# 配置超时时间(秒)
timeout = 5
# 配置代理
proxies = {
'http': '***',
'https': '***',
}
# 使用配置
response = session.get('***', timeout=timeout, proxies=proxies)
```
在接下来的章节中,我们将深入探讨如何使用requests库来发送基本的HTTP请求、处理高级HTTP功能、确保安全传输以及如何在实际项目中发挥其强大的功能。
# 2. requests库基础使用方法
## 2.1 发送基本的HTTP请求
### 2.1.1 GET请求的发送与响应处理
HTTP GET 请求是最常见的网络请求方式,通常用于从服务器获取数据。Requests 库提供了简单直接的方法来发送 GET 请求,并处理服务器的响应。
```python
import requests
# 发送GET请求
response = requests.get('***')
# 检查请求是否成功
if response.status_code == 200:
# 打印响应内容
print(response.text)
else:
# 打印错误信息
print(f"请求失败,状态码:{response.status_code}")
```
以上代码展示了如何使用 `requests.get()` 方法发起一个 GET 请求。在请求成功(状态码为 200)的情况下,服务器的响应内容会通过 `response.text` 属性获取。响应对象 `response` 还包含了其他有用的属性和方法,例如 `response.json()` 可以直接返回解析后的 JSON 响应数据。
### 2.1.2 POST请求的发送与响应处理
与 GET 请求不同的是,POST 请求通常用于向服务器发送数据,例如提交表单数据。以下是如何使用 requests 库发送 POST 请求的例子:
```python
import requests
# POST请求需要包含数据,这里使用json格式
data = {
'key1': 'value1',
'key2': 'value2'
}
response = requests.post('***', json=data)
# 同样检查请求是否成功
if response.status_code == 200:
# 打印响应内容
print(response.json())
else:
# 打印错误信息
print(f"请求失败,状态码:{response.status_code}")
```
在这段代码中,我们通过 `requests.post()` 方法发送了一个 POST 请求。数据通过 `data` 参数传递,`json` 方法会自动将字典数据编码为 JSON 格式。服务器响应的 JSON 数据可以通过 `response.json()` 方法直接解析为 Python 字典。
## 2.2 高级HTTP功能
### 2.2.1 Session会话保持
在进行网络请求时,有时候需要保持会话状态,比如在多个请求间共享 cookies。Requests 库的 `Session` 对象可以用来持久化会话。
```python
import requests
# 创建Session对象
session = requests.Session()
# 使用session发送请求,会自动处理cookies
response = session.get('***')
# 再次使用session发送请求,之前的cookies会自动携带
response = session.get('***')
# 打印响应内容查看是否包含之前的cookies
print(response.text)
```
通过 `requests.Session()` 创建一个会话对象,并用这个对象发送请求,可以使得每个请求都保持相同的会话信息。这意味着使用同一个 session 发送的请求会自动处理 cookies,例如自动发送之前接收到的 cookies。
### 2.2.2 请求头与参数的高级处理
有时需要在发送请求时定制 HTTP 头部信息或查询参数。这可以通过在请求方法中使用 `headers` 和 `params` 参数来完成。
```python
import requests
# 定制HTTP请求头
headers = {
'User-Agent': 'MyApp/1.0',
'Accept': 'application/json'
}
# 发送GET请求并带参数
response = requests.get('***', headers=headers, params={'page': 1})
# 打印请求头和参数
print("请求头:", headers)
print("查询参数:", response.url)
```
在这里,我们创建了一个包含 `User-Agent` 和 `Accept` 的头信息字典,然后将其作为 `headers` 参数传递给 `get()` 方法。对于 `params` 参数,它允许你发送一个字典作为 URL 参数,`requests` 会自动进行 URL 编码。
## 2.3 异常处理与错误管理
### 2.3.1 常见网络请求异常与处理策略
网络请求可能会因为多种原因失败。Requests 库允许你通过 Python 的异常处理机制来优雅地处理这些错误。
```python
import requests
try:
response = requests.get('***')
except requests.exceptions.HTTPError as errh:
print(f"HTTP错误:{errh}")
except requests.exceptions.ConnectionError as errc:
print(f"连接错误:{errc}")
except requests.exceptions.Timeout as errt:
print(f"超时错误:{errt}")
except requests.exceptions.RequestException as err:
print(f"发生请求错误:{err}")
```
在这段代码中,我们使用 try-except 语句块来捕获并处理可能发生的各种异常。`requests.exceptions` 子模块定义了各种异常类,例如 `HTTPError` 表示 HTTP 错误,`ConnectionError` 表示连接问题等。
### 2.3.2 错误处理的自定义与扩展
你还可以自定义一些错误处理的行为,例如重试机制。
```python
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
# 设置重试策略,例如最大重试次数为3,重试间隔为0.5秒
retries = Retry(total=3, backoff_factor=0.5)
# 创建HTTPAdapter,加入重试策略
session = requests.Session()
adapter = HTTPAdapter(max_retries=retries)
# 将适配器添加到session中
session.mount('***', adapter)
session.mount('***', adapter)
try:
response = session.get('***', timeout=1)
except requests.exceptions.RequestException as e:
print(f"请求出现异常:{e}")
```
在这个例子中,我们定义了一个重试策略,使用 `urllib3.util.retry.Retry` 类创建了一个重试对象,并将其应用到 `HTTPAdapter` 对象上。然后,我们通过 `session.mount` 方法将适配器挂载到 session 对象上,使得所有的 HTTP 和 HTTPS 请求都会自动应用该重试策略。
以上就是 requests 库基础使用
0
0