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 自定义重试、代理池

相关推荐
云飞云共享云桌面3 小时前
医疗器械设备研发:多人同时操作 SolidWorks,怎样依靠单台服务器替代多工作站
运维·服务器·网络·数据库·制造
Sylvia33.3 小时前
LOL实时数据接入深度解析:从WebSocket到完整数据模型
java·网络·python·websocket·网络协议
鼹鼠SDN6 小时前
没有公网 IP,如何在外面访问家里的打印机、摄像头和整个局域网?
网络·网络协议·tcp/ip
小诗懂技术9 小时前
【网络通信UDP】基础 进程间不同主机的通信
运维·服务器·网络
DM今天肝到几点?10 小时前
AI 安全进入「攻防同频」:Gemini 3.8 Flash Cyber 上线、Astra 触及关键级、HiddenLayer 融资 1 亿美元
网络·人工智能·深度学习·安全·语言模型·开源·知识图谱
幼儿园蛋小黑11 小时前
TCP 并发:从原理到高并发实践
网络·网络协议·tcp/ip
我爱cope13 小时前
【计算机网络 | 网络层11:ICMP 协议:Ping 和 Traceroute 的底层原理】
网络·学习·计算机网络
Latticy13 小时前
vulnhub系列靶机-Photographer
网络·网络安全·内网渗透·内网
爱浦路 IPLOOK13 小时前
矿山无人化作业5G专网方案:企业专网核心网络选型分析
网络·分布式·科技·5g·信息与通信
制冷技术咨询与服务13 小时前
某纯电牵引车的CAN网络3
网络·某纯电牵引车的can网络2