一个bs承载页资源请求转发工具,支持http 与https


Keywords
proxy
License
ISC
Install
npm install b-proxy-cli@2.0.7

Documentation

b-proxy-cli

http/https中间人代理工具

😀无需转发rule, 自动匹配请求资源 与 本地文件

软件实现的功能

  • http/https 中间人
  • 自动处理线上与本地文件映射
  • 手动rewrite请求url

使用本软件的前提

  • 代理https服务,需要安装根证书
  • 本地服务器目前仅支持webpack-dev-server启动
  • 使用自动匹配情况下--请求资源与匹配资源,文件名需要大体相似,不能请求 common.chunk.js 本地却请求main.chunk.js。

###安装

npm install b-proxy-cli -g

如果要代理https网站,请务必安装根证书,根证书的位置放在模块下面的src/rootCA.crt 请安装,并选择"完全信任";

###使用

在控制台中直接输入 b-proxy-cli 并运行

配置文件demo

module.exports={
  excludePattern: [],
  includePattern: ['p-userframework-ui'],
  localServerHostName: 'http://localhost:3000',
  port: 6789,
  proxyedHostname: 'stnew02.beisen.com',
  customProxyRules: [
    {
      pathRewriteRule: "main-2.0.8.min main.chunk",
      byPass: 'http://10.99.28.143:3001'
    }
  ]
}

上面的配置文件demo代表的大概意思为: 代理运行的端口为6789,只对stnew02.beisen.com 域名下的资源进行代理,代理的时候会检查path是否有'p-userframework-ui字段 如果有的话,作为中间人代理该资源,如果没有的话,作为透明代理。

###配置api

属性 说明 类型 必须配置 默认值
port 代理运行的端口 number no 6789
localServerHostName 本地工程运行的地址 string no http://localhost:3000
excludePattern 指定不需要进行代理的path 特征 string or regexp string no []
includePattern 指定需要进行代理的path 特征 string or regexp string no []
customProxyRules 用户自定义的代理规则 rule[] no
config 配置文件的js地址 js no
###api 介绍
customProxyRules

一个customProxyRules的例子

interferce rule = {
  pathRewriteRule: string,
  byPath: string
}
  customProxyRules: [
    {
      pathRewriteRule: "/vendors/ huhai",
      byPass: 'http://localhost:3000'
    }
  ]

假如您请求的是 http://stnew03.beisen.com/chat-robot/release/dist/vendors.js 经过上面的代理规则,请求的url会变成 http://localhost:3000/chat-robot/release/dist/huhai.js

当然你也可以更改整个路径,比如

  customProxyRules: [
    {
      pathRewriteRule: "/^(.*)$/ common.js",
      byPass: 'http://www.baidu.com'
    }
  ]

这时候的请求url地址就会变成 http://www.baidu.com/common.js

pathRewriteRule 支持类nginx 的path rewrite规则

pathRewriteRule 书写规则

pathRewriteRule使用单空格区分需要匹配的字符串 与 字符串被替换后的字符,可以使用js 正则表达式的所有特征

bypass规则:请务必完整输入http协议/https协议 + hostname

运行方法

  • 使用命令 b-proxy-cli

运行起来后,请在系统的http代理中配置代理服务器运行的ip + 端口,

比如: 本地为 localhost:6789 远程为: 192.168.0.133:6789

如果你不想所有请求都走本代理,可以使用类似SwitchyOmega的工具转发特定域名的请求到本代理

无需配置参数就能匹配到本地文件的原理

承载页面发出的请求,被代理工具比如SwitchyOmega转发到本服务器,服务器依据请求的文件名fileName,与http://localhost:port/webpack-dev-server 列出的文件进行对比,找到能正确匹配fileName的文件url地址,然后转发对应文件数据流到原来的request

匹配规则:

我们承载页面上发出的请求可能是这样的:

开发过程中实际请求的地址可能是这样的

甚至

可以看到承载页面发出的请求 与 实际加载的资源地址很相似(相似的地方是: 文件名的主名不变,可能会以横杠或者点号连接hash值 ),可以找到某种对应关系,基于上面的观察,我使用下面的方法来精确的匹配本地资源地址:

  • 请求http://localhost:port/webpack-dev-server (这个页面提供了当前webpack-dev-server服务的所有资源文件名称和地址);
  • 拿到请求body,正则解析每个文件名对应的文件地址,存为hash表listhash
  • express监听所有资源请求,拿到需要请求的fileName
  • 将fileName正则拆分为只包含点号 及字母等相关的数组,比如common-df04d232497a22c5db38.chunk.min.js,会被拆分为[common,df04d232497a22c5db38,chunk,min,js]
  • 查找listhash中的值,当listhash中的文件名拆分数组 与请求资源名的拆分数组有完全交集(A、B中有代码能完全被另外一方全部包含),代表匹配成功
  • 完全交集的匹配规则伪代码: length(A 交集 B) === Math.max(length(A), length(B));
  • 查找到具有完全交集的情况后,停止查找,从listhash表直接拿到对应的资源文件地址

###changelist 2.0.3 若customProxyRule 配置了byPass & 当前url的host等于此ByPass,那么不再走本地请求

2.0.0

移除对proxyedHostname的支持

为什么要移除?

因为在开发过程中,经常要切换dev、test、online环境,这样很麻烦,且不必要,只要配合includePattern 与excludePattern,同样能精确的匹配到本地资源

1.4.21

bugfix: 报错提示乱码

bugfix: url中有查询字符的时候匹配出错

1.4.20

bugfix: 获取网络ip逻辑错误

1.4.18

feature: 增加51la统计功能

1.4.17 feature:

  • 支持配置文件管理

    • 取消使用 与 选择配置文件

1.4.16

feature: 支持代理资源到本地https服务器(支持自签名证书)

1.4.14

doc: 新增移动端配置文件

bugfix: bypass导航规则有误

1.4.11

bugfix: 配置文件读取bug

feature: 支持配置文件修改自动刷新

1.4.10

feature: 资源对应多个配置文件情况下,出警告信息

1.4.9

bugfix: 不能正确响应302资源文件

1.4.7

feature: pac配置支持友好提示\windows现支持打开文件夹了

bugfix: 刷新页面后不能获取到正确的pac地址

1.4.5

feature: 新增'我的申请'组件配置文档 style:优化readme 1.4.4

bugfix: 代理请求的是否找不到正确的config会直接crash

1.4.3

feature: 支持同时运行多个proxy config

1.4.1

feature: 优化友好页面,使其支持编辑配置 + 新版本检测 功能

1.3.9

bugfix: 对字体文件使用utf-8编码后导致字体size尺寸不对

1.3.6

feature: 为所有请求response 添加 access-control-allow-origin: * 解决跨域问题

1.3.5

feature: 用户自定义规则中支持replace 函数(用来支持复杂的用户替换规则)

1.3.4

bugfix: 防御用户规则转换失败造成程序crash

1.3.3

bugfix: ws 不能广播给所有客户端

1.3.2

pac文件地址提供

1.3.1

提供http代理服务pac.js 文件,方便设备配置代理服务器

1.3.0 breakthrough change

支持图形化选择用户配置文件

1.1.2

feature: 升级rootca的加密级别到rsa2048,防止浏览器提示证书弱密码

1.1.1

feature: 增加系统级别的错误提示notifer

1.1.0

重大更新: 解决bugs bugsfix:customProxyRules 会修改所有代理的url

1.0.24

支持emoji表情在commandline中显示,更友好的提示方式

1.0.19

支持用户自定义path重写规则,支持js 正则表达式所有语法

###作者 使用本软件若有需求或者帮助,请提issues