项目地址是:https://github.com/alibaba/anyproxy
本文分4个阶段
(1) anyproxy的安装
(2)anyproxy的二次开发
(3)关于nodejs的一些知识点
anyproxy的安装,使用
安装系统环境 : centos6/7
nodejs的安装
更新nodejs的yum源
curl --silent --location https://rpm.nodesource.com/setup_8.x | bash -
安装nodejs
yum install -y nodejs
anyproxy的安装
npm install -g anyproxy
anyproxy启动,参数
anyproxy --intercept 代理https请求(下文有)
--port 8009 自定义代理端口(默认是8001,web端口是8002)
--rule xxx.js 使用自定义的规则文件过滤二次开发需求
查看代理客户端的请求:http://ip:8002
https代理
生成ca证书
命令:anyproxy-ca
下载及查找证书
http://ip:8002/fetchCrtFile 下载方式
http://ip:8002/qr_root 二维码方式
使用pm2管理anyproxy进程
pm2:node应用进程的管理器(负载均衡)
安装pm2
npm install -g pm2
pm2运行anyproxy
pm2 start anyproxy -x -- -intercept --rule xxx.js
pm2的其他一些命令
pm2 delete/restart anyproxy 重启,关闭anyproxy
pm2 logs anyproxy anyproxy的运行日志
pm2 monit anyproxy的内存信息
anyproxy的二次开发指南
二次开发的细节部分可以参照
https://github.com/alibaba/anyproxy/tree/master/rule_sample
这部分分别对
http请求协议, http请求头,http请求body
http返回状态码,http返回头,http返回body
做了详细说明
例如下面的rule.js模块
module.exports={
*beforeSendResponse(requestDetail,responseDetail) {
if(requestDetail.url==='http://httpbin.org/user-agent') {
constnewResponse=responseDetail.response;
newResponse.body+='-- AnyProxy Hacked! --';
returnnewPromise((resolve,reject)=>{
setTimeout(()=>{//delay the response for 5s
resolve({ response:newResponse });
},5000);
});
}
},
};
测试方式如下
先启动anyproxy
anyproxy --rule rule.js
命令行执行下面的语句
curl 'http://httpbin.org/user-agent' --proxy http://127.0.0.1:8001
你会收到下面的信息
{ "user-agent": "curl/7.43.0" } -- AnyProxy Hacked! --
nodejs的一些知识点
关于rule.js文件的测试,平时javascript的函数都是可以使用的,
比如查找字符串的位置:indexOf
查找子字符串:substring
字符串转json对象:JSON.parse(string)
json对象转字符串:JSON.strify(object)
下面仅仅以在规则rule.js中发送一个http post请求结尾,因为这个需求还是很多的,比如你做了中间代理,获取想要的信息以后,你肯定想要存放到自己的服务器上等等
var data={
param1:param1,
param2:param2
};
data = JSON.stringify(data);
var options = {
method:"POST",
host:"1207.0.0.1",
port : 8000,
path: '/face/info',
headers : {
'Context-Type':'application/json'
}
};
var req = http.request(option, function(res)){
res.setEncoding('utf-8');
res.on('data', function(chunk){
});
});
req.on('error', function(e){
console.log("xxx: "+e.message())
});
req.write(data);
req.end();