cnproxy

4.0.1 • Public • Published

CNProxy

CNProxy是一个CLI代理工具

为什么选择CNProxy

  • 支持Mac、Linux和Windows(尤其是Linux和Mac)
  • 支持更换组合文件与源文件分开
  • 支持目录映射

这是要使用CNProxy的主要原因。此外,CNProxy可以提高日常开发企业级产品的效率与一堆复杂的构建过程。

产品特点

  • 支持Mac、Linux和Windows
  • 同时支持单文件和组合文件
  • 支持目录映射与任何文件
  • 同时支持HTTP和HTTPS

安装说明

npm install -g cnproxy

如果你不熟悉Node.JS和NPM,你可以访问 NPM包管理器介绍

使用方法

cnproxy -c config.sample.js

设置浏览器的代理127.0.0.1:(默认端口9010)

如果你不知道如何设置浏览器代理,请阅读这篇文章: 如何设置浏览器代理

安装证书

设置好代理后,访问 http://yanfu.vip/getssl 安装证书

IOS 11后的手机,安装好证书后还需要在 设置->通用->关于本机->证书信任设置-> 找到 CNProxy CA 将其打开

mac 安装

 sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ~/.cnproxy/cnproxy.ca.crt

选项介绍:

使用: cnproxy [选项]

选项:

  -h, --help                显示cnproxy帮助信息
  -V, --version             显示当前cnproxy版本号
  -w, --watch [watch]       指定需要观察的URL
  -c, --config [config]     指定代理所需的配置文件
  -p, --port [port]         自定义代理端口号(默认端口:9010)
  -t, --timeout [timeout]   设置超时时间 (默认:5秒)
  -n, --networks [networks] 显示本机网络信息

代理模板规则文件(请使用一个.js文件)

module.exports = {
    middlewares: [
        // 1. 与当地一个取代单一文件
        {
            pattern: 'homepage.js',      // 你想替换匹配url
            responder: "/Users/wangyanmin/code/github/cnproxy/start.js"
        },

        // 2. 用web文件替换单一文件
        {
            pattern: 'myvue.js',      // 你想替换匹配url
            responder: "https://cdn.bootcss.com/vue/2.5.16/vue.js"
        },

        // 3. 组合文件替换为src与绝对的文件路径
        {
            pattern: 'group/test.*.js',
            responder: [
                '/Users/wangyanmin/code/other/test/a.js',
                '/Users/wangyanmin/code/other/test/b.js',
                '/Users/wangyanmin/code/other/test/c.js'
            ]
        },

        // 4. 组合文件替换为src相对文件路径和指定的dir
        {
            pattern: 'group/test.*.js',
            responder: {
                dir: '/Users/wangyanmin/code/other/test',
                src: [
                    'a.js',
                    'b.js',
                    'c.js'
                ]
            }
        },

        // 5. 请求服务器的图片目录映射到本地图片目录
        {
            pattern: 'ui/homepage/img',  // 必须是一个字符串
            responder: '/Users/wangyanmin/Downloads/test_img' // 必须是一个绝对目录路径
        },

        // 6. 使用正则表达式
        {
            pattern: /https?:\/\/[\w\.]*(?::\d+)?\/ui\/(.*)_dev\.(\w+)/,
            responder: 'http://localhost/proxy/$1.$2'
        },

        // 7. 服务器映像目录映射到本地图像目录与正则表达式
        // 这个简单的规则可以替代多个目录相应的环境
        // 如下:
        //   http://host:port/ui/a/img/... => /home/a/image/...
        //   http://host:port/ui/b/img/... => /home/b/image/...
        //   http://host:port/ui/c/img/... => /home/c/image/...
        //   ...
        {
            pattern: /ui\/(.*)\/img\//,
            responder: '/Users/wangyanmin/Downloads/test_img/$1/img/'
        },
        // 8. 使用cookies ,单独设置某一个匹配规则的cookies,
        // 如果需要将全部匹配的url统一设置cookies
        // 可以在启动cnproxy时使用-c 'cookies...'
        {
            pattern: /http:\/\/127.0.0.1:8080\/user\/upload\/(.*)$/,
            responder: 'http://www.qq.com/vip/upload/$1',
            cookies: '_xsrf=2|330a5789|c9627c4a257a5b6067094df2d9a1e1d8|1459947169; SESSION=e8eb5e4b-2ebc-413a-9055-e5b69471146d'
        }
    ],

    // 外部代理
    externalProxy: null,

    // 是否需要走代理
    sslConnectInterceptor: function (clientReq, clientSocket, head) {
        return true
    },

    // 请求拦截器
    requestInterceptor: function (rOptions, req, res, ssl, next) {
        console.log('请求拦截器:requestInterceptor')
        console.log(`正在访问:${rOptions.protocol}//${rOptions.hostname}:${rOptions.port}`);
        console.log('cookie:', rOptions.headers.cookie);
        // res.end('HELLO CNPROXY!');
        next();
    },

    // 响应拦截
    responseInterceptor: function (req, res, proxyReq, proxyRes, ssl, next) {
        console.log('responseInterceptor')
        next();
    }
}

您可以使用这份模板 代理模板文件 文件替换成自己的配置。

开源许可证

CNProxy 使用 MIT 许可

Package Sidebar

Install

npm i cnproxy

Weekly Downloads

0

Version

4.0.1

License

MIT

Unpacked Size

209 kB

Total Files

74

Last publish

Collaborators

  • soocto