Python requests 模块

Python 的 requests 模块是一个简洁且强大的 HTTP 客户端库,用于发送 HTTP 请求和处理响应。它简化了与 Web 服务的交互,支持 GET、POST、PUT、DELETE 等常见 HTTP 方法。以下是其核心功能和使用方法的总结:


1. 安装与导入

# 安装(通过 pip)
pip install requests

# 导入模块
import requests

2. 基本请求方法

GET 请求
response = requests.get("https://api.example.com/data")
print(response.text)  # 获取响应内容(文本)
print(response.json())  # 解析 JSON 响应(自动转换为字典)
POST 请求
  • 提交表单数据

    payload = {"key1": "value1", "key2": "value2"}
    response = requests.post("https://api.example.com/submit", data=payload)
    
  • 提交 JSON 数据

    headers = {"Content-Type": "application/json"}
    data = {"name": "Alice", "age": 30}
    response = requests.post("https://api.example.com/submit", json=data, headers=headers)
    
其他方法
requests.put(url, data=payload)
requests.delete(url)
requests.head(url)
requests.patch(url, data=payload)

3. 请求参数与配置

  • URL 参数params):

    params = {"q": "python", "page": 2}
    response = requests.get("https://api.example.com/search", params=params)
    # 实际 URL:https://api.example.com/search?q=python&page=2
    
  • 请求头headers):

    headers = {"User-Agent": "my-app/1.0", "Authorization": "Bearer token123"}
    response = requests.get(url, headers=headers)
    
  • 超时设置timeout):

    response = requests.get(url, timeout=5)  # 5 秒超时
    
  • 代理配置proxies):

    proxies = {"http": "http://10.10.1.10:3128", "https": "http://10.10.1.10:1080"}
    response = requests.get(url, proxies=proxies)
    

4. 响应处理

  • 响应内容

    response.status_code  # HTTP 状态码(如 200、404)
    response.headers     # 响应头(字典形式)
    response.text       # 文本内容(自动解码)
    response.content    # 二进制内容(如图片、文件)
    response.json()     # JSON 解析为字典(需响应是 JSON 格式)
    
  • 检查请求状态

    response.raise_for_status()  # 如果状态码非 2xx,抛出异常
    

5. 高级功能

会话管理(保持 Cookie)
session = requests.Session()
session.get("https://api.example.com/login", auth=("user", "pass"))  # 登录后保持会话
response = session.get("https://api.example.com/protected-page")     # 自动携带 Cookie
文件上传
files = {"file": open("report.pdf", "rb")}
response = requests.post(url, files=files)
SSL 验证禁用
# 跳过 SSL 证书验证(仅用于测试环境)
response = requests.get(url, verify=False)
流式下载
response = requests.get(url, stream=True)
with open("large_file.zip", "wb") as f:
    for chunk in response.iter_content(chunk_size=8192):
        f.write(chunk)

6. 异常处理

try:
    response = requests.get(url, timeout=3)
    response.raise_for_status()  # 检查状态码
except requests.exceptions.HTTPError as errh:
    print("HTTP 错误:", errh)
except requests.exceptions.ConnectionError as errc:
    print("连接错误:", errc)
except requests.exceptions.Timeout as errt:
    print("超时错误:", errt)
except requests.exceptions.RequestException as err:
    print("其他错误:", err)

7. 示例代码

调用开放 API(JSON 数据)
import requests

url = "https://api.github.com/users/octocat"
response = requests.get(url)
if response.status_code == 200:
    data = response.json()
    print(f"用户名: {data['login']}, 仓库数: {data['public_repos']}")
else:
    print("请求失败,状态码:", response.status_code)
下载文件
url = "https://example.com/image.jpg"
response = requests.get(url)
if response.status_code == 200:
    with open("image.jpg", "wb") as f:
        f.write(response.content)

注意事项

  1. 编码处理:若响应内容编码异常,可手动指定 response.encoding = "utf-8"
  2. 性能优化:使用会话(Session)复用 TCP 连接提升效率。
  3. 安全性:避免在生产环境禁用 SSL 验证(verify=False)。
  4. 资源释放:流式下载(stream=True)需手动关闭响应连接,或使用 with 语句。

requests 是 Python 中最受欢迎的 HTTP 客户端库,适用于 Web 爬虫、API 调用、自动化测试等场景。更多细节可参考官方文档。

你可能感兴趣的:(python,python,开发语言)