AnyProxy是一个开放式的HTTP代理服务器。
Github主页:https://github.com/alibaba/anyproxy
本文主要讲解anyproxy 如何作为npm模块整合进其他工具

引入

npm i anyproxy --save

const AnyProxy = require('anyproxy');
const options = {
  port: 8001,
  rule: require('./ruleModule.js'),
  webInterface: {
    enable: true,
    webPort: 8002
  },
  // throttle: 10000,
  forceProxyHttps: false,
  wsIntercept: false, // 不开启websocket代理
  silent: false,
  dangerouslyIgnoreUnauthorized: true
};
const proxyServer = new AnyProxy.ProxyServer(options);

proxyServer.on('ready', () => { /* */ });
proxyServer.on('error', (e) => { /* */ });
proxyServer.start();

//when finished
// proxyServer.close();

options

  • port {number} 必选,代理服务器端口
  • rule {object} 自定义规则模块
  • throttle {number} 限速值,单位kb/s,默认不限速
  • forceProxyHttps {boolean} 是否强制拦截所有的https,忽略规则模块的返回,默认false
  • silent {boolean} 是否屏蔽所有console输出,默认false
  • dangerouslyIgnoreUnauthorized {boolean} 是否忽略请求中的证书错误,默认false
  • wsIntercept {boolean} 是否开启websocket代理,默认false
  • webInterface {object} web版界面配置
  • enable {boolean} 是否启用web版界面,默认false
  • webPort {number} web版界面端口号,默认8002

代理HTTPS

AnyProxy默认不对https请求做处理,如需看到明文信息,需要配置CA证书
解析https请求的原理是中间人攻击(man-in-the-middle),用户必须信任AnyProxy生成的CA证书,才能进行后续流程

生成证书并解析所有https请求

anyproxy-ca #生成rootCA证书,生成后需要手动信任
anyproxy --intercept #启动AnyProxy,并解析所有https请求

rule模块

ruleModule 实现将浏览器访问的指定域名的网站全部下载下来

const URL = require('./url.js')
module.exports = {
  // 模块介绍
  summary: 'my customized rule for AnyProxy',
  // 发送请求前拦截处理
  *beforeSendRequest(requestDetail) { /* ... */ },
  // 发送响应前处理
  *beforeSendResponse(requestDetail, responseDetail) { 
      const url = requestDetail.url;
      
      if(url.indexOf('baidu')!=-1){
          console.log(url);
          const data = responseDetail.response.body;
          console.log('data',url);
          // URL.downloadFile(url,data);
      }
  },
  // 是否处理https请求
  *beforeDealHttpsRequest(requestDetail) { 
      const host = requestDetail.host;
      if(host&&host.indexOf('baidu')!=-1){
          return true;
      }else{
        return false
      }
  },
  // 请求出错的事件
  *onError(requestDetail, error) { /* ... */ },
  // https连接服务器出错
  *onConnectError(requestDetail, error) { /* ... */ }
};

如需要完整代码,请留言

标签: none

添加新评论