Skip to content

Python requests

约 593 字大约 2 分钟

学习

2025-03-22

requests 是 Python 中最流行的 HTTP 请求库,它使得发送 HTTP/1.1 请求变得非常简单。本文将介绍 requests 库的基本用法和常见操作。

1. 安装 Requests

使用 pip 安装 requests:

pip install requests

2. 基本请求方法

Requests 提供了所有 HTTP 动词对应的方法:

import requests

# GET 请求
response = requests.get('https://api.example.com/items')

# POST 请求
response = requests.post('https://api.example.com/items', data={'key': 'value'})

# PUT 请求
response = requests.put('https://api.example.com/items/1', data={'key': 'value'})

# DELETE 请求
response = requests.delete('https://api.example.com/items/1')

3. 请求参数

3.1 URL 参数(Query String)

# 添加 URL 参数
params = {
    'page': 1,
    'size': 10
}
response = requests.get('https://api.example.com/items', params=params)

3.2 请求头(Headers)

headers = {
    'User-Agent': 'Mozilla/5.0',
    'Authorization': 'Bearer token123'
}
response = requests.get('https://api.example.com/items', headers=headers)

3.3 发送数据

# 发送表单数据
data = {
    'username': 'user1',
    'password': '123456'
}
response = requests.post('https://api.example.com/login', data=data)

# 发送 JSON 数据
json_data = {
    'name': 'John',
    'age': 30
}
response = requests.post('https://api.example.com/users', json=json_data)

4. 响应处理

response = requests.get('https://api.example.com/items')

# 状态码
print(response.status_code)  # 200, 404, 500 等

# 响应内容
print(response.text)  # 文本内容
print(response.json())  # JSON 内容
print(response.content)  # 二进制内容

# 响应头
print(response.headers)

5. 高级特性

5.1 会话(Session)

# 创建会话
session = requests.Session()
session.headers.update({'Authorization': 'Bearer token123'})

# 使用会话发送请求
response = session.get('https://api.example.com/items')

5.2 超时设置

# 设置超时(单位:秒)
response = requests.get('https://api.example.com/items', timeout=5)

5.3 错误处理

try:
    response = requests.get('https://api.example.com/items')
    response.raise_for_status()  # 如果状态码不是 200,抛出异常
except requests.exceptions.RequestException as e:
    print(f"发生错误: {e}")

6. 最佳实践

  1. 始终设置超时
  2. 使用异常处理
  3. 正确关闭会话
  4. 验证 SSL 证书
  5. 使用适当的 Content-Type
# 完整示例
import requests
from requests.exceptions import RequestException

try:
    with requests.Session() as session:
        session.headers.update({
            'User-Agent': 'Mozilla/5.0',
            'Content-Type': 'application/json'
        })
        
        response = session.get(
            'https://api.example.com/items',
            params={'page': 1},
            timeout=5,
            verify=True  # SSL 验证
        )
        
        response.raise_for_status()
        data = response.json()
        print(data)
        
except RequestException as e:
    print(f"请求失败: {e}")

7. 常见问题解决

  1. SSL 证书验证失败:使用 verify=False(不推荐在生产环境中使用)
  2. 代理设置:使用 proxies 参数
  3. 重定向处理:使用 allow_redirects 参数

总结

Requests 库是 Python 中进行 HTTP 请求的最佳选择,它提供了简单易用的 API,支持多种请求方法和数据格式,并且有完善的错误处理机制。掌握这些基础知识将帮助你更好地进行网络请求开发。

参考资源

© 2024 Eitan's Blog