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

相关推荐
一起聊电气17 小时前
智能断路器:智能照明系统的数字化电气安全内核
网络·安全
xiep143833351017 小时前
华为系列服务器开启Monitor/MWAIT
java·服务器·网络
福大大架构师每日一题17 小时前
nginx 1.31.1 发布:一次安全修复驱动的主线升级,涉及 Rewrite、HTTP/2、Mail、MP4 与工作流修正
nginx·安全·http
CableTech_SQH17 小时前
上海大歌剧院工程综合布线解决方案分析报告
大数据·网络·数据库·5g·信息与通信
齐齐大魔王17 小时前
Linux-网络抓包
linux·运维·网络
清水白石00817 小时前
从脚本到系统:设计一个支持插件、限流、重试与监控的 Python 异步爬虫框架
网络·爬虫·python
BullSmall18 小时前
zenmap的设置扫描tcp和udp协议
网络协议·tcp/ip·udp
半壶清水18 小时前
一次处理挖矿木马的记录,从流量异常到揪出 XMRig 的过程
网络·安全·病毒
IT大白鼠18 小时前
2008年YouTube全球劫持事件:BGP协议脆弱性与互联网基础设施安全反思
网络·安全