#catproxy

> ​	在工作中是否经常遇到这种情况，需要将cdn的host切换成本地测试，或者线上出现bug，需要修复时候需要将前端文件映射到本地，这个时候通常会用到代理工具 fiddler，或者charles。
>
> ​	无论charles或者fiddler都可以切换host。但是都只能将一个host完整的切换过去，并不能按照目录区分切换

## 功能

- 完成页面资源从本地和服务器端映射
- 针对不同得资源做不同得ip映射
- 提供ui界面去修改映射关系
- 支持https的映射

> 其实本工具就是一个代理工具的变种，也属于重复的造轮子吧,
>
> 原理就是 在本地以80，443端口启动服务器，这个时候把host配置成127.0.0.1，这个host就归 工具接管,如果不配置任何规则，则指向在线资源

## 使用帮助

1. 安装nodejs
2. 全局安装  `npm install catproxy -g`
3. 运行命令 `catproxy`  mac,linux 需要sudo
4. 将需要映射到本地的**host改成127.0.0.1** 如 `127.0.0.1 baidu.com`
5. https 请求需要生成 并且安装证书 [https帮助](wiki/https.md)
6. 运行后会自动打开管理界面，在未配置任何cdn或者规则的情况下，会直接指向在线的资源
### 使用参数说明

- ` catproxy -t http -p 80`   表示只启动 http代理，在80端口
- `catproxy -t https -p 443`   表示只启动https代理，在 443端口
- `catproxy -t all -p 80,443` 表示同时启动http和https代理在   80，443端口下
- `catproxy -c` 表示生成https的根证书 [https帮助](wiki/https.md)
- `catproxy -h` 可以查看具体的说明适用

### 界面操作说明
> 打开后得界面

> ![整体界面](wiki/img/ui_1.jpg)

>  整个界面分为  导航菜单区域， 分组区域， 操作菜单， host列表区域

#### 导航区域
> ![导航区域](wiki/img/ui_2.jpg)
>
> 1. 下载host文件，即host的配置文件
> 2. 导入host配置文件，下载后得配置文件可以通过整个导入 
> 3. 下载证书文件
> 4. 证书文件二维码，即可扫二维码去下载证书文件
> 5. 帮助

#### 分组区域
> ![分组区域](wiki/img/ui_3.jpg)

> 分组区域是一个二级树列表，一级表示分组 二级表示分组下地host配置， 可以通过操作菜单中得 **新建** 创建新的分组 

> 分组 在鼠标悬浮状态下，会有三个 icon 按钮 分别表示 删除， 禁止使用， 编辑

> 编辑将会 编辑当前分组的名称，禁止使用将会禁止当前分组下的所有规则, 删除将会删除当前分组

> 点击二级 host配置菜单，将会在 右侧的 host列表区域显示当前分组列表下地host配置，可以进行设置或者编辑

> 所有分组规则  **先匹配先执行**

#### 操作菜单
> ![操作菜单](wiki/img/ui_4.jpg)

> 操作菜单主要有新建分组，禁止所有分组  禁止缓存的功能

> 1. 禁止所有分组，即将所有分组都禁止，这个时候所有的 资源将会定位到在线
> 2. 禁止缓存，所有请求将会去掉缓存
> 3. 新建分组，新建一个分组菜单,可以选择一个分组的名称，和二级分组的名称,如下图所示

>    ![新建分组](wiki/img/ui_5.jpg)

>    **所有修改必须点击保存，才能生效**

#### host列表区域
> ![host列表区域](wiki/img/ui_6.jpg)
>  
>
> host列表区域可以 设置具体的规则

> 通过新建 按钮可以新建一个规则

> 所有得规则 源地址 可以是一个正则表达式，也可以是一个 url， **注意的是如果是 https协议则必须以 https开头否则会默认处理成http**

> 规则类型总共有  4个类型 host, 本地文件，本地目录，远程文件，重定向

> 1. host，即将一个host地址指定到一个固定的ip下   如  源地址填写  http://163.com/test  目标地址填写  86.86.86.86  将会将 163.com/test目录下地都指定到86.86.86.86 的ip下，其他目录下还是会访问在线

> 2. 本地文件  如 源地址填写  http://163.com/test.js 目标地址填写  d:\\test\\test.js 将会将 http://163.com/test.js定位到本地 test的文件

> 3. 本地目录  如源地址填写  http://pimg1.126.net/cnd1/ 目标地址填写  d:\\test 将会在本地磁盘  test目录下寻找cdn1目录下对应目录对应的资源文件, 这里为了防止文件夹不匹配 引入虚拟路径的字段，虚拟路径配置表示本地不存在的一个路径，但是cdn路径中又使必须得完成匹配

> 4. 远程文件  如 源地址填写  http://163.com/test.js 目标地址填写  http://126.net/test.js 将会将 地址http://126.net/test.js的内容加载到 http://163.com/test.js下

> 5. 重定向 如源地址填写  http://qq.com  目标地址填写 http://163.com 将会将qq.com重定向到 163.com
## ![版本更新](updateinfo.md)

## License
**MIT**
