1 | <h1 style="font-weight: normal"> 代理工具 </h1>
|
2 |
|
3 | <h2 style="font-weight: normal"> 启动代理 </h2>
|
4 |
|
5 | Ykit 使用 [Jerry Proxy][1] 作为代理插件。它结合了`SwitchHost`和`Charles/Fiddler`的功能,包括:
|
6 |
|
7 | - 无 DNS 缓存的 Host 分组管理
|
8 | - 请求 / 响应日志(抓包)
|
9 | - 断点
|
10 | - URL MAP
|
11 | - 接口 Mock 服务
|
12 | - 网速控制(Throttling)
|
13 |
|
14 | 并且支持 Qunar 通用域名的 HTTPS。通过下面命令启动代理:
|
15 |
|
16 | ```
|
17 | $ sudo ykit server -x
|
18 | ```
|
19 |
|
20 | <h2 style="font-weight: normal"> 切换到代理服务 </h2>
|
21 |
|
22 | 注意此时代理还未生效,我们还需要把请求打到我们的本地代理上。简单的方式是使用`SwitchyOmega`等chrome代理插件,或者使用Proxy右上角推荐的代理插件。以下是`SwitchyOmega`的配置,我们将所有外部请求打到`127.0.0.1:999`,也就是我们的本地代理上。
|
23 |
|
24 | ![屏幕快照 2016-09-08 上午11.43.18](http://gitlab.corp.qunar.com/uploads/mfe/ykit/370cfe24b5/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7_2016-09-08_%E4%B8%8A%E5%8D%8811.43.18.png)
|
25 |
|
26 | ** 注意: 你需要把所有忽略的规则全部清空。另外, ShadowSocks和所有的代理都冲突, 在使用时也需要关闭。 **
|
27 |
|
28 | <h2 style="font-weight:normal"> Host管理 </h2>
|
29 |
|
30 | ** 我们建议你彻底放弃编辑Host文件修改Host的方式并清空系统host文件中的所有内容, 直接转移到这套方案。这套方案不仅没有DNS缓存, 项目和环境的切换也十分便捷。 **
|
31 |
|
32 | 访问http://127.0.0.1:1000/qproxy#/?_k=1kpa78
|
33 | 左侧导航是项目(方案)列表,右侧面板是该分组下 Host 规则。这里你需要手动选择当前激活的分组。
|
34 |
|
35 | ** 对于Ykit项目,会在项目内新建/读取`ykit.host`,并且同步更新。也就是说你不需要手动创建一个新的方案。 **
|
36 |
|
37 | ![屏幕快照 2016-09-08 上午11.40.30](http://gitlab.corp.qunar.com/uploads/mfe/ykit/392730b24f/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7_2016-09-08_%E4%B8%8A%E5%8D%8811.40.30.png)
|
38 |
|
39 | 点击`添加规则`可以批量导入Host规则, 格式和Host文件完全相同, 除了不支持注释以外:
|
40 |
|
41 | ![Host导入](http://cfyyq.img48.wal8.com/img48/561720_20161116122834/147927077876.png)
|
42 |
|
43 | 在Host导入以后, 配置会立即生效, 无需重启浏览器。点击`导出Host`可以将当前的Host配置转换成Host文件的格式。
|
44 |
|
45 | 另外, Jerry还提供了快速切换环境的功能, 每条Host的右侧有可选择的环境和机器IP, 你可以通过选择它们来快速切换环境。
|
46 |
|
47 | ![切换Env](http://cfyyq.img48.wal8.com/img48/561720_20161116122834/147927237041.png)
|
48 |
|
49 | 我们内置了一些常用的环境如qzz和local, 如果选择online等于没有配置host, 选择custom可以手动输入IP。
|
50 |
|
51 | 如果你需要修改默认的环境/机器组配置, 可以在服务器组配置面板中手动编辑, 如图:
|
52 |
|
53 | ![Edit Server Group](http://cfyyq.img48.wal8.com/img48/561720_20161116122834/147927217132.png)
|
54 |
|
55 | 修改完成后, 你需要重新启动代理才能生效。
|
56 |
|
57 | <h2 style="font-weight: normal"> Mock服务 </h2>
|
58 |
|
59 | 所有ykit项目都可以开启mock服务, 首先你需要在项目的根路径下添加一个mock.js, 内容如下:
|
60 |
|
61 | ```
|
62 | module.exports = [
|
63 | {
|
64 | // 当前环境
|
65 | current: 'local',
|
66 | // 匹配规则
|
67 | pattern: /test\.qunar\.com\/([^?]*)(\?.*)?/,
|
68 | // 所有的responder, 生效的是等于current的那个
|
69 | responders: {
|
70 | "beta": 'http://$1.qunar.com',
|
71 | "dev": 'http://$1.qunarman.com',
|
72 | "local": './mock/$1.json'
|
73 | },
|
74 | // 配置jsonp wrapper函数名
|
75 | jsonpCallback: 'jsCallback',
|
76 | // 响应头的content-type
|
77 | contentType: 'text/html'
|
78 | },
|
79 | {
|
80 | // 简易配置, 匹配规则
|
81 | pattern: /test2\.qunar\.com\/(.*)/,
|
82 | // 返回一个json格式数据, 而不是一个路径
|
83 | responder: {id: 2222},
|
84 | // 同样可以配这个和contentType
|
85 | jsonpCallback: 'jsCallback'
|
86 | },
|
87 | {
|
88 | pattern: /test3\.qunar\.com/,
|
89 | responder: {id: '1212dl;akds;l'}
|
90 | }
|
91 | ];
|
92 | ```
|
93 |
|
94 | 然后在代理面板中找到你的项目, 然后在右侧开启Mock服务开关即可生效。
|
95 |
|
96 | ![Mock](http://cfyyq.img48.wal8.com/img48/561720_20161116122834/14792706369.png)
|
97 |
|
98 | <h2 style="font-weight: normal"> 自定义 Url Map </h2>
|
99 |
|
100 | 切换到Url Map选项卡,可以设置请求的远程/本地映射,支持正则匹配。
|
101 |
|
102 | ![屏幕快照 2016-09-08 上午11.53.39](http://gitlab.corp.qunar.com/uploads/mfe/ykit/c1f92f0479/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7_2016-09-08_%E4%B8%8A%E5%8D%8811.53.39.png)
|
103 |
|
104 | <h2 style="font-weight: normal"> 查看请求日志/设置断点 </h2>
|
105 |
|
106 | 切换到请求/响应日志选项卡,可以查看通过代理请求的接口详细信息,在进行移动端调试时十分便捷。
|
107 |
|
108 | ![屏幕快照 2016-09-08 上午11.55.40](http://gitlab.corp.qunar.com/uploads/mfe/ykit/68d3467c6c/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7_2016-09-08_%E4%B8%8A%E5%8D%8811.55.40.png)
|
109 |
|
110 | 点击日志详情右上角的设置断点可以中断请求, 设置断点之后的效果:
|
111 |
|
112 | ![Block](http://cfyyq.img48.wal8.com/img48/561720_20161116122834/14792715856.png)
|
113 |
|
114 | 点击Continue/Abort就可以让响应继续返回或者abort掉, 这在模拟接口超时或失败时很有用, 另外你还可以在Response选项卡中编辑响应的内容, 如下:
|
115 |
|
116 | ![Block Edit Response](http://cfyyq.img48.wal8.com/img48/561720_20161116122834/147927172206.png)
|
117 |
|
118 | 修改内容之后, 让响应Continue即可生效。在不需要中断时, 可以在断点配置面板中将断点关闭或者删除。
|
119 |
|
120 | <h2 style="font-weight:normal"> HTTPS和Throttling </h2>
|
121 |
|
122 | 如果你在做HTTPS的开发但是仅仅需要使用host功能,HTTPS代理不必开启。这时候代理服务器会接收浏览器的隧道请求,host配置依然可以生效。
|
123 |
|
124 | 需要在HTTPS下使用URL MAP/抓包等功能的时候,需要开启HTTPS代理,但是需要安装根证书JerryProxyCA.cer, 下载地址:
|
125 | https://github.com/Ellery0924/Jerry/blob/master/JerryProxyCA.cer
|
126 |
|
127 | 你需要手动信任这个证书, 整个流程和12306的证书安装流程一样。
|
128 |
|
129 | ** 需要注意的是这个根证书只支持三个通配域名: \*.qunar.com \*.qunarzz.com和qunarzz.com。如果有更多的域名需要支持, 请qtalk联系`jiao.shen` **
|
130 |
|
131 | 另外还需要在并在网络配置面板中设置`开启HTTPS代理`, 如下:
|
132 |
|
133 | ![开启https](http://cfyyq.img48.wal8.com/img48/561720_20161116122834/147927120123.png)
|
134 |
|
135 | 另外JerryProxy还提供了常用的网速限流功能, 可以再网络配置中将它打开, 选择No Throttling之后会取消限速。
|
136 |
|
137 | <h2 style="font-weight: normal"> 注意事项 </h2>
|
138 |
|
139 | - 需要抓取移动设备的请求时,请保证移动设备和电脑在同一个无线网络下,然后修改移动设备的代理配置,让IP指向自己的电脑,端口为`999`
|
140 |
|
141 | 如有其它问题请联系 `jiao.shen@qunar.com`
|
142 |
|
143 | [1]: https://github.com/Ellery0924/QProxy
|