0

0

如何正确使用 requests 获取 HTTP 重定向历史

碧海醫心

碧海醫心

发布时间:2026-02-20 20:22:00

|

126人浏览过

|

来源于php中文网

原创

如何正确使用 requests 获取 HTTP 重定向历史

本文详解 requests 库中 r.history 为空的原因及解决方案,重点说明服务端重定向方式(如 Flask 的 redirect())与客户端 JavaScript 跳转的本质区别,并提供可运行的修复代码与关键配置说明。

本文详解 `requests` 库中 `r.history` 为空的原因及解决方案,重点说明服务端重定向方式(如 flask 的 `redirect()`)与客户端 javascript 跳转的本质区别,并提供可运行的修复代码与关键配置说明。

在使用 Python 的 requests 库进行 HTTP 请求时,Response.history 是一个包含所有重定向响应对象的列表(按跳转顺序排列),但其生效需同时满足两个前提:服务端必须返回标准 HTTP 重定向状态码(如 301、302)并携带 Location 响应头,且客户端必须启用自动重定向机制(即 allow_redirects=True,该参数默认为 True,但显式声明更稳妥)。

你遇到的 r.history 为空,根本原因在于 webserver.py 中采用的是前端 JavaScript 跳转:

@app.route('/')
def index():
    return '<script>location.href = "https://youtube.com"</script>'

这段代码返回的是状态码 200 OK 的 HTML 页面,浏览器执行 <script> 后跳转,但 requests 作为纯 HTTP 客户端<strong>不会解析或执行 JavaScript,因此完全感知不到跳转行为——它只收到一个 200 响应,自然无历史记录。</script>

✅ 正确做法是使用 Flask 的 redirect() 函数,由服务端主动发起符合 RFC 规范的 HTTP 重定向:

Heeyo
Heeyo

Heeyo:AI儿童启蒙陪伴师,风靡于硅谷的儿童AI导师和玩伴

下载
# app.py(修正版)
from flask import Flask, redirect

app = Flask(__name__)

@app.route('/')
def index():
    return redirect('https://python.org')  # 返回 302 + Location: https://python.org

if __name__ == '__main__':
    app.run('0.0.0.0', 80, debug=False)  # 注意:生产环境勿用 debug=True 或绑定 0.0.0.0

对应客户端请求代码也需规范书写(避免 URL 拼接错误,并显式启用重定向):

# req.py(推荐写法)
import requests

url = 'http://localhost:80'  # ✅ 显式带上协议,避免拼接歧义
r = requests.get(url, allow_redirects=True)  # ✅ 显式声明,增强可读性

print("最终到达 URL:", r.url)           # 输出: https://python.org
print("重定向历史:", [resp.url for resp in r.history])  # 输出: ['http://localhost:80']
print("历史响应状态码:", [resp.status_code for resp in r.history])  # 如: [302]

⚠️ 关键注意事项:

  • URL 协议不可省略:requests.get('localhost:80') 会被解析为 http://localhost:80/,但若服务端监听 http:// 且未配置 HTTPS,则可能因协议不匹配导致连接失败;建议始终显式指定 http:// 或 https://。
  • allow_redirects 默认为 True,但显式设置是最佳实践,尤其在调试或链路复杂时可避免隐式行为引发的困惑。
  • Flask 的 redirect() 默认返回 302(临时重定向),如需永久重定向可传入 code=301 参数。
  • 本地测试端口 80 需管理员权限(Linux/macOS 需 sudo,Windows 可能受限),开发阶段建议改用 port=5000 并同步更新客户端 URL。

总结:r.history 为空不是 requests 的 Bug,而是客户端与服务端交互方式不匹配所致。只有当服务端通过标准 HTTP 状态码和 Location 头驱动重定向时,requests 才能捕获完整跳转链。掌握这一机制,是构建可靠自动化爬虫、API 测试工具和微服务调用链的基础能力。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python Flask框架
Python Flask框架

本专题专注于 Python 轻量级 Web 框架 Flask 的学习与实战,内容涵盖路由与视图、模板渲染、表单处理、数据库集成、用户认证以及RESTful API 开发。通过博客系统、任务管理工具与微服务接口等项目实战,帮助学员掌握 Flask 在快速构建小型到中型 Web 应用中的核心技能。

97

2025.08.25

Python Flask Web框架与API开发
Python Flask Web框架与API开发

本专题系统介绍 Python Flask Web框架的基础与进阶应用,包括Flask路由、请求与响应、模板渲染、表单处理、安全性加固、数据库集成(SQLAlchemy)、以及使用Flask构建 RESTful API 服务。通过多个实战项目,帮助学习者掌握使用 Flask 开发高效、可扩展的 Web 应用与 API。

75

2025.12.15

location.assign
location.assign

在前端开发中,我们经常需要使用JavaScript来控制页面的跳转和数据的传递。location.assign就是JavaScript中常用的一个跳转方法。通过location.assign,我们可以在当前窗口或者iframe中加载一个新的URL地址,并且可以保存旧页面的历史记录。php中文网为大家带来了location.assign的相关知识、以及相关文章等内容,供大家免费下载使用。

232

2023.06.27

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1186

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1150

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

821

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

460

2023.08.02

windows无法访问共享电脑
windows无法访问共享电脑

在现代社会中,共享电脑是办公室和家庭的重要组成部分。然而,有时我们可能会遇到Windows无法访问共享电脑的问题。这个问题可能会导致数据无法共享,影响工作和生活的正常进行。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2361

2023.08.08

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

796

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号