代理工具

启动代理

YKit 使用 Jerry Proxy 作为代理插件。它结合了SwitchHostCharles/Fiddler的功能,包括:

  • 无 DNS 缓存的 Host 分组管理
  • 请求 / 响应日志(抓包)
  • 断点
  • URL MAP
  • 接口 Mock 服务
  • 网速控制(Throttling)
    并且支持 Qunar 通用域名的 HTTPS。通过下面命令启动代理:
  1. $ sudo ykit server -x

切换到代理服务

注意此时代理还未生效,我们还需要把请求打到我们的本地代理上。简单的方式是使用SwitchyOmega等chrome代理插件,或者使用Proxy右上角推荐的代理插件。以下是SwitchyOmega的配置,我们将所有外部请求打到127.0.0.1:999,也就是我们的本地代理上。

屏幕快照 2016-09-08 上午11.43.18

注意: 你需要把所有忽略的规则全部清空。另外, ShadowSocks和所有的代理都冲突, 在使用时也需要关闭。

Host管理

我们建议你彻底放弃编辑Host文件修改Host的方式并清空系统host文件中的所有内容, 直接转移到这套方案。这套方案不仅没有DNS缓存, 项目和环境的切换也十分便捷。

访问http://127.0.0.1:1000/qproxy#/?_k=1kpa78左侧导航是项目(方案)列表,右侧面板是该分组下 Host 规则。这里你需要手动选择当前激活的分组。

对于YKit项目,会在项目内新建/读取ykit.host,并且同步更新。也就是说你不需要手动创建一个新的方案。

屏幕快照 2016-09-08 上午11.40.30

点击添加规则可以批量导入Host规则, 格式和Host文件完全相同, 除了不支持注释以外:

Host导入

在Host导入以后, 配置会立即生效, 无需重启浏览器。点击导出Host可以将当前的Host配置转换成Host文件的格式。

另外, Jerry还提供了快速切换环境的功能, 每条Host的右侧有可选择的环境和机器IP, 你可以通过选择它们来快速切换环境。

我们内置了一些常用的环境如qzz和local, 如果选择online等于没有配置host, 选择custom可以手动输入IP。

如果你需要修改默认的环境/机器组配置, 可以在服务器组配置面板中手动编辑, 如图:

Edit Server Group

修改完成后, 你需要重新启动代理才能生效。

Mock服务

所有ykit项目都可以开启mock服务, 首先你需要在项目的根路径下添加一个mock.js, 内容如下:

  1. module.exports = [
  2. {
  3. // 当前环境
  4. current: 'local',
  5. // 匹配规则
  6. pattern: /test\.qunar\.com\/([^?]*)(\?.*)?/,
  7. // 所有的responder, 生效的是等于current的那个
  8. responders: {
  9. "beta": 'http://$1.qunar.com',
  10. "dev": 'http://$1.qunarman.com',
  11. "local": './mock/$1.json'
  12. },
  13. // 配置jsonp wrapper函数名
  14. jsonpCallback: 'jsCallback',
  15. // 响应头的content-type
  16. contentType: 'text/html'
  17. },
  18. {
  19. // 简易配置, 匹配规则
  20. pattern: /test2\.qunar\.com\/(.*)/,
  21. // 可以直接返回一个json,同样也支持上面那种正则匹配的方式
  22. responder: {id: 2222},
  23. // 同样可以配这个和contentType
  24. jsonpCallback: 'jsCallback'
  25. },
  26. {
  27. pattern: /test3\.qunar\.com/,
  28. responder: {id: '1212dl;akds;l'}
  29. },
  30. {
  31. pattern: /fakeurl/,
  32. // 也支持传入函数,它的参数是一个parse过的URL对象
  33. // 例如localhost/fakeurl?a=1&b=2 parse的结果是 {"protocol":"http:","slashes":true,"auth":null,"host":"localhost","port":null,"hostname":"localhost","hash":null,"search":"?a=1&b=2","query":"a=1&b=2","pathname":"/fakeurl","path":"/fakeurl?a=1&b=2","href":"http://localhost/fakeurl?a=1&b=2"}
  34. // 这在API依赖参数时会非常有用,例如某个分页列表的API需要传入当前页码的情况
  35. responder: function (parsedUrl) {
  36. // 它的返回值将作为请求的response.body
  37. return parsedUrl;
  38. }
  39. }
  40. ];

然后在代理面板中找到你的项目, 然后在右侧开启Mock服务开关即可生效。

Mock

自定义 Url Map

切换到Url Map选项卡,可以设置请求的远程/本地映射,支持正则匹配。

屏幕快照 2016-09-08 上午11.53.39

查看请求日志/设置断点

切换到请求/响应日志选项卡,可以查看通过代理请求的接口详细信息,在进行移动端调试时十分便捷。

屏幕快照 2016-09-08 上午11.55.40

点击日志详情右上角的设置断点可以中断请求, 设置断点之后的效果:

Block

点击Continue/Abort就可以让响应继续返回或者abort掉, 这在模拟接口超时或失败时很有用, 另外你还可以在Response选项卡中编辑响应的内容, 如下:

Block Edit Response

修改内容之后, 让响应Continue即可生效。在不需要中断时, 可以在断点配置面板中将断点关闭或者删除。

HTTPS和Throttling

如果你在做HTTPS的开发但是仅仅需要使用host功能,HTTPS代理不必开启。这时候代理服务器会接收浏览器的隧道请求,host配置依然可以生效。

需要在HTTPS下使用URL MAP/抓包等功能的时候,需要开启HTTPS代理,但是需要安装根证书JerryProxyCA.cer, 下载地址:https://github.com/Ellery0924/Jerry/blob/master/JerryProxyCA.cer

你需要手动信任这个证书, 整个流程和12306的证书安装流程一样。

需要注意的是这个根证书只支持三个通配域名: .qunar.com .qunarzz.com和qunarzz.com。

另外还需要在并在网络配置面板中设置开启HTTPS代理, 如下:

开启https

另外JerryProxy还提供了常用的网速限流功能, 可以再网络配置中将它打开, 选择No Throttling之后会取消限速。

注意事项

  • 需要抓取移动设备的请求时,请保证移动设备和电脑在同一个无线网络下,然后修改移动设备的代理配置,让IP指向自己的电脑,端口为999
    如有其它问题请联系 siven.jin