requests HTTP 库解析

requests ------ 为人类设计的 Python HTTP 库

官方地址:https://pypi.org/project/requests/

最新版本:2.34.2

协议:Apache-2.0

周下载量:3 亿 +,全球 400 万 + 项目依赖

一、requests 是什么

requests 是 Python 生态中最流行、使用最广泛的 HTTP 客户端库,遵循 HTTP for Humans 设计理念,用极简 API 封装复杂的 HTTP 逻辑,让发送请求、处理响应变得像调用函数一样简单。

它基于 urllib3 构建,自动实现连接池、SSL 校验、Keep-Alive 等能力,广泛用于:

  • 接口测试与自动化

  • 网络爬虫与数据采集

  • 后端服务间调用

  • WebHook / 第三方平台集成

  • 运维监控与上报

二、核心特性

PyPI 官方页面明确标注 requests 具备以下生产级能力:

  • 支持完整 HTTP 方法:GET/POST/PUT/DELETE/HEAD/OPTIONS

  • 自动处理 URL 参数、表单编码、JSON 数据

  • 优雅的 Cookie 持久化与 Session 管理

  • 浏览器级 TLS/SSL 证书验证

  • Basic/Digest 认证开箱即用

  • 自动解压、自动编码识别、Unicode 支持

  • 多文件上传、超时控制、连接池复用

  • 完美兼容 Python 3.10+ 与 PyPy

三、安装

1. 标准安装

bash 复制代码
python -m pip install requests

2. 国内镜像加速

bash 复制代码
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple

3. 验证安装

python 复制代码
import requests
print(requests.__version__)  # 输出 2.34.x 表示成功

四、快速上手

1. 发送基础请求

python 复制代码
import requests

# GET
r = requests.get("https://httpbin.org/get")

# POST
r = requests.post("https://httpbin.org/post", json={"key": "value"})

# 其他方法
# r = requests.put(...)
# r = requests.delete(...)

2. 处理响应

python 复制代码
r = requests.get('https://httpbin.org/basic-auth/user/pass', auth=('user', 'pass'))

print(r.status_code)      # 200
print(r.encoding)         # utf-8
print(r.headers['Content-Type'])
print(r.text)             # 文本
print(r.json())           # 自动解析 JSON

3. 常用写法

带参数 GET
python 复制代码
params = {"q": "python", "page": 1}
r = requests.get("https://httpbin.org/get", params=params)
自定义请求头
python 复制代码
headers = {
    "User-Agent": "Mozilla/5.0",
    "Token": "xxx"
}
r = requests.get("https://httpbin.org/get", headers=headers)
文件上传
python 复制代码
files = {"file": open("test.jpg", "rb")}
r = requests.post("https://httpbin.org/post", files=files)
会话保持(Cookie 复用)
python 复制代码
s = requests.Session()
s.get("https://httpbin.org/cookies/set/session/123")
r = s.get("https://httpbin.org/cookies")

五、为什么选择 requests(对比标准库)

特性 urllib / http.client requests
代码量 多、繁琐 极简、直观
参数处理 手动拼接 自动字典传参
连接池 需手动实现 自动开启
SSL 验证 复杂配置 开箱安全
响应解析 手动解码 自动 text/json
维护状态 困难 Session 一键搞定

requests 让 HTTP 回归简单,让开发者专注业务而非协议细节。

六、使用场景

  1. 设置超时,避免请求阻塞

    python 复制代码
    r = requests.get(url, timeout=10)
  2. 使用 Session 提升性能(连接复用)

  3. 关闭不必要验证(内网可信环境)

    python 复制代码
    r = requests.get(url, verify=False)
  4. 捕获异常,提高鲁棒性

    python 复制代码
    try:
        r = requests.get(url)
        r.raise_for_status()
    except Exception as e:
        print(e)
  5. 大流量场景搭配:requests\-adapter 自定义重试、代理池

相关推荐
茯苓gao1 小时前
嵌入式开发笔记:CANopen相关移位运算与通信协议术语详解
网络·嵌入式硬件·学习·信息与通信
万联WANFLOW1 小时前
SD-WAN 控制平面高可用怎么做?SDWAN 控制器挂了,全网会发生什么
运维·网络·分布式·架构
酱学编程2 小时前
【从零到一实现一个 AI Agent 框架 · 第四篇】04. 任务规划:拆解复杂目标 -
服务器·网络·数据库·人工智能
风行南方3 小时前
密码学之分组密码
网络·密码学
艾莉丝努力练剑4 小时前
OpenCode AI 编程:Ubuntu 24.04 环境安装与使用指南
linux·服务器·网络·人工智能·tcp/ip·ubuntu
谷雪_6585 小时前
Linux 网络命名空间:从内核原理到企业级容器网络架构全景实战
linux·网络·架构
liulilittle5 小时前
KCC 拥塞控制算法缺陷修复记录(26/07/05)
网络·tcp/ip·计算机网络·c·信息与通信·tcp·通信
Tian_Hang5 小时前
Eclipse Ditto 的权限策略
java·服务器·前端·网络·ide·ubuntu·eclipse
ai生成式引擎优化技术6 小时前
从知识连接到智能组织:WSaiOS认知网络的理论框架与系统设计摘要
网络·python·plotly·django·pygame
冰暮流星6 小时前
flask之http请求方法
网络·网络协议·http