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

相关推荐
0x5312 小时前
Java网络编程(二)
java·服务器·网络
微硬创新12 小时前
老旧产线改造:耐达讯自动化16路4‑20mA转PROFINET的工程实践
人工智能·网络协议·自动化·信息与通信
西安景驰电子14 小时前
《PTP精确时间协议系列》第一篇:从原理到应用,全面解读IEEE 1588
linux·运维·服务器·开发语言·网络·windows·php
ZGi.ai14 小时前
多模型回答不稳定:路由规则与评测方法
网络·人工智能·大模型评测·多模型·模型路由·zgi·模型网关
80s77715 小时前
独享住宅IP、长效代理ip是什么?有哪些作用?
网络·网络协议·tcp/ip
IPdodo_15 小时前
静态 IP、住宅 IP 和固定出口有什么区别?开发场景选型指南
服务器·网络·网络协议·tcp/ip·代理ip
_ZHOURUI_H_15 小时前
Unity TCP底层极限拆解:粘包、半包、CRC、序列号、双缓冲到底怎么一起工作的?
网络·网络协议·tcp/ip·游戏·unity·游戏引擎·游戏开发
长江&后浪17 小时前
防火墙的描述
开发语言·网络·php
小新讲网安17 小时前
安全运营中心(SOC)建设实战:从SIEM到威胁狩猎全流程指南
网络·安全·web安全·网络安全·网安
SKYLAB0117 小时前
打破智能家居生态壁垒|微喇智能 WKV553‑A 模组原生支持 Matter,解锁跨平台互联新体验
网络·智能家居