如何实现类似Fiddler AutoResponder的HTTP代理:替换指定URL内容
实现Electron应用请求拦截与内容替换方案
方法一:直接修改Electron应用的请求拦截(最可靠)
如果能接触到Electron应用源码,或可通过注入脚本修改,直接用Electron的session模块拦截请求是最直接的方式:
- 在Electron主进程中添加拦截逻辑:
const { app, BrowserWindow, session } = require('electron'); app.on('ready', () => { const mainWindow = new BrowserWindow(); // 拦截目标域名下的所有请求 session.defaultSession.webRequest.onBeforeRequest({ urls: ['*://randomdomain.com/*'] }, (details, callback) => { // 替换URL为你的站点地址 const newUrl = details.url.replace('https://randomdomain.com', 'https://cliqqi.ml'); // 执行重定向 callback({ redirectURL: newUrl }); }); mainWindow.loadURL('原应用的启动地址'); });
若无法直接修改源码,可使用asar extract工具解压应用的asar包,修改主进程代码后重新打包,或通过第三方工具注入脚本。
方法二:Node.js搭建正确的代理服务器
之前代理失败大概率是未正确处理HTTPS请求与重定向逻辑,以下是可用的实现(基于http-proxy):
- 安装依赖:
npm install http-proxy https fs
- 代理脚本代码:
const http = require('http'); const https = require('https'); const httpProxy = require('http-proxy'); const fs = require('fs'); const proxy = httpProxy.createProxyServer({}); // 处理HTTP请求 const httpServer = http.createServer((req, res) => { rewriteAndProxy(req, res); }); // 处理HTTPS请求(需生成自签证书) const httpsServer = https.createServer({ key: fs.readFileSync('server.key'), cert: fs.readFileSync('server.crt') }, (req, res) => { rewriteAndProxy(req, res); }); // 核心URL重写逻辑 function rewriteAndProxy(req, res) { if (req.url.includes('randomdomain.com')) { req.url = req.url.replace('randomdomain.com', 'cliqqi.ml'); proxy.web(req, res, { target: 'https://cliqqi.ml', changeOrigin: true }); } else { // 其他请求正常转发到原目标 const target = new URL(`https://${req.headers.host}`); proxy.web(req, res, { target: target.origin, changeOrigin: true }); } } // 启动服务 httpServer.listen(8080); httpsServer.listen(8443);
- 配置Electron应用使用代理:
- 启动时添加参数:
--proxy-server=http://localhost:8080 - 或在应用设置中手动将HTTP/HTTPS代理设为
localhost:8080
方法三:Python mitmproxy拦截实现
mitmproxy专为HTTP/HTTPS拦截设计,配置简单:
- 安装mitmproxy:
pip install mitmproxy
- 编写拦截脚本(
rewrite.py):
from mitmproxy import http def request(flow: http.HTTPFlow) -> None: if "randomdomain.com" in flow.request.pretty_url: new_url = flow.request.pretty_url.replace("https://randomdomain.com", "https://cliqqi.ml") flow.request.url = new_url
- 启动mitmproxy:
mitmdump -s rewrite.py
- 配置Electron应用代理为
localhost:8080,并安装mitmproxy的CA证书(否则HTTPS请求会因证书验证失败被拦截)。
关键注意事项
- 处理HTTPS请求时,必须让Electron应用信任代理的CA证书,否则会触发证书错误。
- 若Electron应用启用了
webSecurity: false或自定义session配置,需调整拦截逻辑适配。 - 确保替换后的站点返回内容的格式、结构与原站点一致,避免应用运行异常。
内容的提问来源于stack exchange,提问作者Niks
相关产品推荐
相关产品推荐

