Skip to content

coderup2u/Http-web-API

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 

Repository files navigation

Http-web-API

智能抓包分析器 V31.1 (Aeterna Edition) 🚀

License Version Compatibility Author

一份献给所有 Web 探索者的礼物 🎁。这不仅仅是一个工具,更是一种探索精神的体现,一种对技术世界无尽好奇的延伸。

English Readme Coming Soon...


目录 (Table of Contents)


🌟 项目亮点

  • ✨ 零配置,即装即用:无需安装任何重量级软件,通过浏览器“油猴”插件即可在任何网页上运行。
  • 🌐 全方位拦截:完美捕获 FetchXHR (Ajax)SSE (流式数据)WebSocket 请求,让数据无所遁形。
  • 🎨 现代化 UI/UX:精心设计的暗色系悬浮窗界面,支持拖拽、缩放和记忆位置,最小化后变为一颗会呼吸的辉光球,既美观又不打扰。
  • 🔍 深度稽查:提供强大的请求详情审查功能,包括请求头、响应头、请求体、响应体、调用堆栈和时间瀑布流,一目了然。
  • 🛠️ 功能集大成:内置智能过滤、多种排序方式、URL 搜索、一键复制 cURL/Fetch 代码、导出 JSON 档案等高级功能,满足你的各种“刁钻”需求。
  • 💖 充满人文关怀:这不仅是冷冰冰的代码,我们希望它能激发你的创造力,让你感受到“我来我也行”的开源精神。

🚀 懒人一键安装

前提: 你需要一个现代浏览器(如 Chrome, Firefox, Edge),并已安装 Tampermonkey (油猴) 扩展。

安装步骤:

  1. 确保油猴已就位:如果你的浏览器右上角没有看到油猴的图标,请先点击上方链接安装它。

  2. 一键安装脚本

  3. 验证安装:刷新任意网页,如果右下角出现了一个蓝色、会呼吸的悬浮球 🔵,恭喜你,你已经成功进入了新的观测纪元!


📖 使用教程

  1. 唤醒与交互

    • 展开面板:单击右下角的蓝色悬浮球,面板会“嗖”地一下展开。
    • 移动面板:按住面板顶部的标题栏,像拖动普通窗口一样随意拖拽。
    • 缩放面板:将鼠标移动到面板左上角,当光标变为缩放箭头时,按住并拖动即可调整大小。
    • 最小化:点击标题栏右侧的“-”按钮,面板会收缩成悬浮球。
  2. 核心功能区

    • 请求列表:所有捕获到的网络请求都会实时显示在这里。流式请求(SSE/WSS)会有特殊的辉光标识。
    • 顶部控制栏
      • 状态指示灯:绿色表示抓包核心已成功注入页面。
      • 搜索框:输入关键字,实时过滤出 URL 包含该关键字的请求。
      • 类型筛选:只看 FetchWSS?没问题,在这里选择。
      • 排序方式:按请求发出的时间、响应大小或耗时进行排序。
  3. 操作与分析

    • 查看详情:单击列表中的任意一条请求,会弹出一个“深度稽查”窗口,里面有关于这个请求的一切!
    • 快捷操作
      • 复制选项 (📋):点击请求条目右侧的剪贴板图标,可以选择将该请求复制为 cURL 命令、Fetch 代码或完整的 JSON 数据。
      • 删除此条 (🗑️):点击垃圾桶图标,移除你不想看到的请求。
    • 底部按钮组
      • 暂停/继续抓包:临时停止或恢复捕获新请求。
      • 清空列表:一键清除所有已捕获的请求。
      • 智能预设过滤:帮你自动过滤掉常见的广告、统计脚本和无关紧要的静态资源。
      • 复制/导出档案:将当前捕获的所有请求数据,以易于分析的 JSON 格式,复制到剪贴板或直接导出为文件。

💡 核心哲学与设计原理

🌍 世界观:万物皆可“观测”

我们相信,每一个在网络中流动的数据包,都承载着信息与意义。它们共同构建了我们所见的数字世界。这个工具的诞生,源于一种最纯粹的渴望:赋予每个用户“观测”这个流动世界的能力。

这并非为了“控制”,而是为了“理解”。当你能清晰地看到一个网页背后发生了什么,哪些数据在与服务器悄悄“对话”,你就从一个被动的“使用者”,转变为一个主动的“探索者”。这种视角的变化,是通往技术深度和创造自由的第一步。我们坚信,透明度是最好的老师

🛠️ 方法论:无侵入的“附加层”

我们是如何实现这一切的?答案是 “猴子补丁 (Monkey Patching)”

  • 专业术语解释:这是一种在程序运行时动态修改其代码的技术。
  • 大白话时间:想象一下,浏览器原本用来发送网络请求的工具函数(如 window.fetch)是一条固定的“高速公路”。我们的脚本就像是在这条高速公路上设立了一个智能检查站
    1. “劫持”:当页面加载时,我们告诉浏览器:“嘿,以后发请求别走老路了,先从我这个检查站过一下。” 我们把原来的 fetch 函数悄悄保管起来,换上我们自己写的、带有记录功能的“新 fetch”。
    2. “记录”:每当有请求要通过,我们的“新 fetch”就会把它所有的信息(URL、方法、请求头等)详细地记录下来,并展示在我们的面板上。
    3. “放行”:记录完毕后,我们会调用那个被我们保管起来的“原版 fetch”函数,让请求继续走完它正常的旅程。

通过这种方式,我们既没有修改网站的任何源代码,也没有改变请求的最终结果。我们只是在它必经之路上增加了一个“观测层”。这保证了工具的通用性和安全性,让它能优雅地运行在几乎所有网站之上。


🔬 技术深度解析

🏛️ 代码架构:模块化的“微观城市”

为了避免代码像一团乱麻,我们采用了单一对象命名空间的设计模式,将所有功能都封装在 SnifferV31 这个“总指挥部”里。这就像建立一座微观城市:

  • CONFIG: 城市规划局 - 存放所有核心配置,如最大请求数、面板尺寸等。
  • state: 市政数据中心 - 管理所有动态变化的状态,如捕获到的请求列表、是否正在抓包等。
  • Utils: 公共服务部 - 提供各种实用的工具函数,如格式化数据、创建提示框等,供其他所有部门调用。
  • StreamParser: 流数据处理厂 - 专门负责解析 SSE 这种持续不断的数据流。
  • Core: 交通枢纽(拦截核心) - 这是城市的心脏,负责前面提到的“猴子补丁”,拦截并处理所有进出的网络请求。
  • UI: 城市建设与宣传部 - 负责构建用户看到的所有界面(HTML)、美化它(CSS),并让它能响应用户的操作(事件监听)。
  • Features & Exporters: 特殊功能大楼 - 存放如智能过滤、复制 cURL 等具体的功能逻辑。
  • init: 城市启动仪式 - 程序的入口,负责按顺序调用其他部门,让整个城市开始运转。

这种模块化的结构,使得代码高内聚、低耦合,极大地便利了后期的维护和功能扩展。

🔑 关键技术剖析

  • window.fetch & XMLHttpRequest 代理

    • 技术点:通过保存原始函数引用,然后重写 window 上的同名函数,我们在新的函数内部实现了数据捕获逻辑,最后再调用原始函数完成网络通信。
    • 挑战:如何处理流式响应(response.body.tee())和各种异常情况是关键。我们通过 tee() 方法将响应流一分为二,一份给浏览器正常使用,一份给我们自己读取分析,做到了两不耽误。
  • UI 交互逻辑 (UI/UX)

    • 拖拽与点击分离:我们通过在 mousedown 时设置一个 hasDragged 标志位,在 mousemove 中判断移动距离来更新它。在 mouseup 时,如果 hasDraggedfalse,则视为一次“点击”;反之,则为一次“拖拽”。这完美解决了悬浮球“拖动后又触发点击”的经典难题。
    • 边界检测与位置记忆:在拖拽或缩放结束后,会调用 ensureInBounds 函数,获取窗口的当前位置和视口的尺寸,通过计算确保窗口不会超出屏幕。同时,在最小化前和移动后,会将位置信息(left, top)保存在 state.panelPosition 中,以便恢复时使用。
  • 异步与状态管理

    • async/await:在 fetch 拦截器中大量使用,以优雅地处理 Promise-based 的异步流程。
    • 闭包:在 XMLHttpRequest 的事件监听器中,通过闭包捕获了每个请求独有的 requestData 对象,确保了在异步回调中能准确地更新对应的请求状态。

🧠 算法与逻辑

  • 防抖 (Debounce)
    • 问题:当网络请求非常频繁时(例如,一个流式请求在1秒内返回几十次数据),如果每次都立即更新整个 UI 列表,会造成巨大的性能开销,甚至导致页面卡顿。
    • 解决方案:我们引入了 debouncedUpdateUI 函数。它就像一个“缓冲器”,在接到更新请求后,会等待一小段时间(例如 100 毫秒)。如果在这期间又有新的更新请求进来,它会重置等待时间。只有当“风平浪静”了 100 毫秒后,它才真正执行一次 UI 更新。这极大地合并了高频操作,提升了流畅度。

🎯 适用场景与目标用户

  • 👨‍💻 Web 开发者:在开发和调试阶段,快速查看 API 的请求参数和返回数据,而无需打开笨重的浏览器开发者工具。
  • 🕵️‍♀️ 测试工程师:验证前端发送的数据是否正确,后端返回的数据是否符合预期。
  • 👨‍🎓 学生与学习者:通过实际观察知名网站的网络交互,直观地学习 HTTP 协议、API 设计和前后端通信原理。
  • 🧐 好奇的探索者:想知道你正在浏览的网页背后,到底在和哪些服务器进行着怎样的“秘密通信”?这个工具为你打开了一扇窗。

✅ 当前状态 vs. 🌌 未来展望

已完成 (What's Done)

  • 完整的 Fetch/XHR/SSE/WSS 拦截与分析。
  • 流畅、现代化的 UI/UX,包括拖拽、缩放、折叠、位置记忆。
  • 丰富的辅助功能:搜索、排序、过滤、复制、导出。
  • 深度稽查面板,提供全面的请求细节。
  • 优秀的性能与稳定性。

未来计划 (The Road Ahead)

我们相信,创造永无止境。这个工具的未来,充满了想象空间:

  • 🌐 国际化 (i18n):提供多语言支持,让全球的开发者都能无障碍使用。
  • 🎨 主题定制:允许用户自定义界面颜色、字体,甚至在明/暗主题间切换。
  • ✍️ 请求重放与修改:不仅能看,还能“动手”!增加一个可以修改请求参数后重新发送的功能,这将是调试的终极利器。
  • 📜 HAR 格式支持:支持导入和导出标准的 HAR (HTTP Archive) 文件,以便与 Charles, Fiddler 等专业工具联动。
  • 🧩 插件化系统:设计一个插件系统,允许社区开发者编写自己的小功能,例如“一键格式化 JWT”、“显示图片预览”等。

👍 优点 vs. 👎 缺点

优点 (The Good)

  1. 极致便利:无需任何后端服务或代理设置,一个浏览器插件搞定一切。
  2. 跨平台:只要能装油猴的浏览器,就能运行。
  3. 实时性:所有请求实时捕获并显示,所见即所得。
  4. 轻量级:相比专业的抓包工具,它对系统资源的占用微乎其微。

缺点 (The Not-So-Good)

  1. 权限限制:它是一个运行在浏览器环境中的 JS 脚本,因此无法捕获浏览器本身发出的、或非网页环境的网络请求(例如,无法抓取桌面应用的数据包)。
  2. 功能深度:虽然功能强大,但在某些极端专业的领域(如复杂的协议分析、断点调试),与 Charles, Fiddler, Wireshark 等桌面级工具相比仍有差距。
  3. 潜在的冲突:在极少数情况下,“猴子补丁”技术可能会与某些网站自身的、同样修改了原生函数的代码产生冲突。但这种情况非常罕见。

🤝 贡献指南

世界因为分享而多彩,代码因为开源而强大。 我们热烈欢迎任何形式的贡献!

无论你是发现了 Bug,有一个绝妙的点子,还是想优化某段代码,都可以:

  1. Fork 本仓库:在你的 GitHub 账户下创建一个本项目的副本。
  2. 创建你的分支git checkout -b feature/YourAmazingIdea
  3. 提交你的更改git commit -m 'Add some AmazingIdea'
  4. 推送到分支git push origin feature/YourAmazingIdea
  5. 发起 Pull Request:向我们展示你的杰作!

你的每一次尝试,都是在为这个世界增添一份新的可能。勇敢地去创造吧!


📜 开源协议

本项目基于 Apache License 2.0 开源协议。

这意味着你可以自由地使用、修改和分发代码,但需要遵守协议中的相关条款。我们选择这个协议,是希望在保护创作者权益的同时,最大化地促进知识的分享与技术的传播。


🙏 致谢

感谢每一位正在阅读这份文档的你。

你的关注,就是对我们最大的支持。愿这个小小的工具,能为你的开发之旅带来一丝便利,为你的探索之路点亮一盏明灯。

Stay curious, stay creative. 保持好奇,保持创造。


About

本仓库只做教学思路,都均在合理的范围中使用

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 100.0%