electron-anyproxy规则配置详解:beforeSendRequest等5大钩子函数从入门到精通

📅 2026/8/21 18:11:35
electron-anyproxy规则配置详解:beforeSendRequest等5大钩子函数从入门到精通
electron-anyproxy规则配置详解beforeSendRequest等5大钩子函数从入门到精通【免费下载链接】electron-anyproxy A http/https proxy client, using to analyze and mock.项目地址: https://gitcode.com/gh_mirrors/el/electron-anyproxy想要掌握electron-anyproxy规则配置理解钩子函数是关键中的关键。electron-anyproxy 是一款基于 Electron 和 Vue 构建的 http/https 网络代理客户端内置网络抓包、数据拦截、网速模拟与接口 Mock 四大核心能力。而这一切强大功能的开关都藏在一个小小的规则文件里。本篇文章将带你从零开始用最通俗的语言讲透 beforeSendRequest、beforeSendResponse 等 5 大钩子函数让你从只会抓包进阶到随心改包。什么是 electron-anyproxy 规则文件为什么它如此重要简单来说规则文件就是一个普通 JS 文件它以module.exports导出一个对象对象里定义了多个钩子函数。代理服务器在处理每个请求的不同阶段会主动调用这些钩子让你有机会在请求发出前、响应返回前等关键时刻插一脚实现拦截、修改甚至伪造数据。项目自带的默认规则模板位于 lib/rule_default.js官方还准备了 8 个可直接运行的学习样例存放在 rule_sample 目录下强烈建议你边看本文边对照样例学习。规则加载机制你的规则文件是如何生效的在动手写规则之前先花 30 秒了解规则是怎么被加载的。加载逻辑集中在 lib/ruleLoader.js它支持两种加载方式本地路径直接指定项目目录下的 JS 文件远程 URL以 http 开头的地址会自动下载并缓存到本地后再加载你只需要在 electron-anyproxy 的规则配置界面填入规则文件的路径或 URL点击启用即可生效整个过程无需重启代理。钩子函数总览5 大钩子各自负责什么下面这张表帮你快速建立全局认知钩子函数触发时机核心用途beforeSendRequest请求发出之前改请求、直接返回本地响应beforeSendResponse响应返回之前改响应数据、状态码、响应头beforeDealHttpsRequestHTTPS 握手阶段决定是否拦截某个 HTTPS 请求onError请求出错时统一处理错误onConnectError连接出错时处理连接层异常每个钩子都是生成器函数带*号这意味着你可以在里面用yield做异步操作比如延迟返回、等待外部接口数据灵活性极高。钩子一beforeSendRequest 请求拦截与修改最常用这是使用频率最高的钩子也是 Mock 功能的基石。它接收一个requestDetail参数里面包含url、protocol、requestOptions、requestData等请求信息。场景 1修改请求数据POST 数据篡改参考 sample_modify_request_data.js当请求目标为http://httpbin.org/post时把 POST 内容替换成任意字符串*beforeSendRequest(requestDetail) { if (requestDetail.url.indexOf(http://httpbin.org/post) 0) { return { requestData: i-am-anyproxy-modified-post-data }; } }场景 2修改请求头UA 伪装参考 sample_modify_request_header.js把 User-Agent 改成自定义值用于模拟不同设备访问const newRequestOptions requestDetail.requestOptions; newRequestOptions.headers[User-Agent] AnyProxy/0.0.0; return { requestOptions: newRequestOptions };场景 3修改请求路径接口重定向参考 sample_modify_request_path.js把某个接口的路径统一指向/user-agent实现假接口引流。场景 4修改请求协议HTTP 强制转 HTTPS参考 sample_modify_request_protocol.js把请求的port改成 443 并返回protocol: https强制走加密通道。场景 5直接返回本地响应终极 Mock这是接口 Mock最核心的用法参考 sample_use_local_response.js干脆不发请求直接伪造一个完整的响应返回给客户端const localResponse { statusCode: 200, header: { Content-Type: application/json }, body: {hello: this is local response} }; return { response: localResponse };前端开发时后端接口还没写好用这一招一分钟就能让页面跑起来。钩子二beforeSendResponse 响应修改返回值篡改如果说 beforeSendRequest 是请求拦截那 beforeSendResponse 就是响应拦截。它额外接收一个responseDetail参数包含response.statusCode、response.header、response.body等响应信息。修改响应数据追加/替换内容参考 sample_modify_response_data.js在响应体末尾追加一段文字并演示了如何用 Promise 延迟 5 秒返回*beforeSendResponse(requestDetail, responseDetail) { const newResponse responseDetail.response; newResponse.body -- AnyProxy Hacked! --; return new Promise((resolve) { setTimeout(() resolve({ response: newResponse }), 5000); }); }修改响应状态码与响应头参考 sample_modify_response_statuscode.js 和 sample_modify_response_header.js把状态码改成 404或给响应头加上X-Proxy-By: AnyProxy标记用来测试前端对异常状态码的处理逻辑。钩子三beforeDealHttpsRequest HTTPS 解密控制HTTPS 请求默认需要安装根证书才能解密抓包。这个钩子让你能按域名精细控制哪些 HTTPS 请求需要解密、哪些直接放行。返回true表示处理该请求返回false表示放行。默认实现见 rule_default.js返回false即不额外干预。钩子四与钩子五onError 与 onConnectError 错误兜底线上调试最怕报错这两个钩子就是你的错误处理专员onError(requestDetail, error)请求过程中抛出异常时触发可用于记录错误日志或返回兜底响应onConnectError(requestDetail, error)建立连接失败时触发比如目标服务器拒绝连接虽然平时用得少但一旦遇到接口偶发超时、页面白屏这类疑难杂症写个错误日志钩子能帮你快速定位问题。快速上手指南从编写到生效的完整流程创建规则文件复制 rule_sample 中任一样例改造成自己的逻辑填写规则路径在 electron-anyproxy 的规则配置页面填入文件绝对路径启用规则点击启用代理自动加载无需重启验证效果用curl --proxy http://127.0.0.1:8001或浏览器访问目标地址观察拦截结果注意每个样例文件头部的注释里都写明了测试命令和预期响应照着执行即可快速验证你的规则是否生效这是新手最容易忽略的宝藏信息。进阶技巧让规则更强大的 3 个实用习惯善用生成器特性钩子是*生成器函数配合yield可以暂停等待异步结果实现先查数据库再决定返回什么的复杂 Mock按 URL 精准匹配用requestDetail.url.indexOf()精确过滤避免误伤其他请求多规则协同可以为不同项目准备不同规则文件随时切换互不干扰总结一张图看懂 electron-anyproxy 规则配置至此electron-anyproxy规则配置的 5 大钩子函数你已经全部掌握beforeSendRequest 负责入口把关beforeSendResponse 负责出口加工beforeDealHttpsRequest 控制解密范围onError 与 onConnectError 负责异常兜底。配合 rule_sample 里的 8 个样例文件从修改请求头到伪造本地响应你都可以在 5 分钟内跑通第一个规则。规则配置的能力边界只取决于你的想象力。现在就打开 electron-anyproxy写你的第一个钩子函数吧【免费下载链接】electron-anyproxy A http/https proxy client, using to analyze and mock.项目地址: https://gitcode.com/gh_mirrors/el/electron-anyproxy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考