AnyProxy 4.0 完全指南:网络请求管理与二次开发详解
什么是AnyProxy?
AnyProxy是一款基于Node.js开发的高性能HTTP/HTTPS请求管理服务器,它提供了强大的网络请求拦截和修改能力。作为阿里巴巴开源的项目,AnyProxy在Web开发、移动端测试、API调试等领域有着广泛的应用。
核心特性
- 全协议支持:同时支持HTTP和HTTPS协议管理
- 可视化界面:内置Web界面实时查看请求详情
- 二次开发能力:通过规则模块自定义请求处理逻辑
- 跨平台:支持Windows、macOS和Linux系统
- 灵活部署:可作为全局模块或npm模块集成到项目中
安装与快速入门
系统准备
对于Debian/Ubuntu系统,建议先安装nodejs-legacy包:
sudo apt-get install nodejs-legacy
全局安装
npm install -g anyproxy
启动请求管理服务
anyproxy
默认配置:
- 管理端口:8001
- Web界面端口:8002
启动后,将系统或浏览器的HTTP请求管理设置为127.0.0.1:8001即可开始使用。
HTTPS请求管理配置
AnyProxy通过中间人(MITM)技术解析HTTPS请求,需要配置CA证书:
- 生成根证书:
anyproxy-ca
- 启动HTTPS解析:
anyproxy --intercept
安全提示:使用HTTPS解析功能前,请确保您理解其安全风险,并只在自己可控的环境中使用。
作为npm模块使用
AnyProxy可以集成到Node.js项目中:
const AnyProxy = require('anyproxy');
const options = {
port: 8001,
rule: require('./myRuleModule'),
webInterface: {
enable: true,
webPort: 8002
}
};
const proxyServer = new AnyProxy.ProxyServer(options);
proxyServer.on('ready', () => {
console.log('请求管理服务准备就绪');
});
proxyServer.start();
规则模块开发
AnyProxy最强大的功能在于其可编程的规则模块系统,允许开发者自定义请求处理逻辑。
基本结构
一个典型的规则模块包含以下方法:
module.exports = {
summary: '自定义规则描述',
*beforeSendRequest(requestDetail) { /* 请求发送前处理 */ },
*beforeSendResponse(requestDetail, responseDetail) { /* 响应返回前处理 */ },
*beforeDealHttpsRequest(requestDetail) { /* HTTPS请求处理判断 */ },
*onError(requestDetail, error) { /* 错误处理 */ }
};
处理流程详解
-
请求拦截阶段:
beforeSendRequest- 可以修改请求头、请求体、目标地址等
- 可以直接返回响应,跳过真实请求
-
服务端响应阶段:代理将请求发送到目标服务器
-
响应处理阶段:
beforeSendResponse- 可以修改响应状态码、响应头、响应体等
-
HTTPS特殊处理:
beforeDealHttpsRequest- 决定是否对特定HTTPS请求进行解析
实用示例
修改请求头
*beforeSendRequest(requestDetail) {
if (requestDetail.url.includes('httpbin.org')) {
const newOptions = Object.assign({}, requestDetail.requestOptions);
newOptions.headers['User-Agent'] = 'AnyProxy Modified UA';
return { requestOptions: newOptions };
}
return null;
}
修改响应内容
*beforeSendResponse(requestDetail, responseDetail) {
if (requestDetail.url === 'http://httpbin.org/user-agent') {
const newResponse = responseDetail.response;
newResponse.body += '\nModified by AnyProxy';
return { response: newResponse };
}
return null;
}
延迟响应
*beforeSendResponse(requestDetail, responseDetail) {
return new Promise(resolve => {
setTimeout(() => {
resolve({ response: responseDetail.response });
}, 2000); // 延迟2秒
});
}
高级功能
WebSocket管理
启动时添加--ws-intercept参数即可管理WebSocket连接:
anyproxy --ws-intercept
系统请求管理
AnyProxy提供了系统请求配置的API:
// 启用系统全局请求管理
AnyProxy.utils.systemProxyMgr.enableGlobalProxy('127.0.0.1', '8001');
// 禁用系统全局请求管理
AnyProxy.utils.systemProxyMgr.disableGlobalProxy();
证书管理
// 检查根证书是否存在
AnyProxy.utils.certMgr.ifRootCAFileExists();
// 生成新的根证书
AnyProxy.utils.certMgr.generateRootCA((error, keyPath) => {
if (!error) {
console.log('证书已生成在:', keyPath);
}
});
常见问题解决方案
-
HTTPS请求未被解析
- 确保已生成并信任CA证书
- 启动时添加
--intercept参数 - 或在规则模块中实现
beforeDealHttpsRequest方法
-
证书信任问题
- iOS 10.3+需要在设置中手动启用证书信任
- 安卓系统需要从安全设置中安装证书
-
自签名证书网站访问
- 可通过规则模块针对特定域名关闭证书验证:
*beforeSendRequest(requestDetail) { if (requestDetail.url.includes('internal-site.com')) { const newOptions = requestDetail.requestOptions; newOptions.rejectUnauthorized = false; return { requestOptions: newOptions }; } }
最佳实践建议
- 开发环境:使用AnyProxy调试API接口,修改响应数据
- 测试环境:模拟网络延迟、失败等异常情况
- 生产环境:谨慎使用HTTPS解析功能,确保符合安全规范
- 规则模块:建议为不同项目创建独立的规则模块
- 性能优化:对于大量请求,注意规则模块的性能影响
AnyProxy作为一款功能强大的请求管理工具,既能满足日常开发调试需求,也能通过规则模块实现复杂的网络请求处理逻辑。掌握其使用方法可以显著提升开发效率和调试能力。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



