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

相关推荐
treesforest5 小时前
平时上网留下的IP地址,到底能被查到什么?
网络·网络协议·tcp/ip·ip地址·ip查询·定位服务
多巴胺梦想家5 小时前
06 代数系统:运算背后的结构之美
网络·拓扑学
小锋学长生活大爆炸6 小时前
【福利】最新免费领取云服务器和虚拟主机攻略
网络·github
8125035337 小时前
第 60 篇:IP选项:那些被遗忘的功能
网络·tcp/ip·智能路由器
IT小盘8 小时前
04-大模型流式输出原理-SSE与Python实现
开发语言·网络·人工智能·python
网络研究院9 小时前
2026年上半年十大网络攻击和数据泄露事件
网络·安全·漏洞·风险·数据·泄露·事件
巨量HTTP10 小时前
Python爬虫动态换IP实战,彻底解决IP403封禁、限流问题(附完整代码)
爬虫·python·tcp/ip·http
我星期八休息10 小时前
网络编程—UDP与TCP
linux·运维·网络·数据库·网络协议·tcp/ip·udp
玖玥拾10 小时前
Unity 3D 笔记(十四)Unity/C# Socket 网络笔记3
服务器·网络·unity·c#
数智化管理手记11 小时前
财务大数据怎么管住资金风险?财务大数据和财务数智化到底怎么结合?
大数据·网络·数据库·人工智能·数据挖掘