上篇文章,咱们感触到 tcpdump 与 wireshark 的组合之美,原来工具与工具之前不只竞争,还有单干,你是否还记得上篇文章中有一个伏笔,那就是代理工具:charles。本文章针对 charles 进行解说,带你持续体验接口测试之旅。
charles 是一个优雅的名子,你能够称说它:查尔斯学生。它是一个网络的管理员,你的任何 http/https 网络音讯,都要通过查尔斯学生审核,如果你和查尔斯学生关系好,你会失去这些音讯,甚至能够篡改和收发。对,你没看错,charles 能够解决 https 协定音讯!上篇文章咱们对 https 协定谈虎色变,因为 https 是 htttp 的加密版,tcpdump 和 wireshak 对这种加密伎俩大刀阔斧,但 charles 出类拔萃,他弱小到能够解决 https 协定下的音讯。
如果代理配置正确您会看到 charles 学生的全貌,上边是菜单栏,右边记录您拜访的每个网站 / 主机,右侧显示信息细节。它十分弱小,只有您学会应用它,就能够看到网络上传输的所有事件。
为了让所有浏览器(或者网络应用)的数据送达到 charles 手中,您必须设置 charles 为代理服务器,但每次开启或敞开 charles 后,都要重新配置,如果您想偷点懒,能够在 Proxy->Proxy Settings 弹出的对话框中配置行为。
- 小明:“选项中有两个代理,请问 charles 学生,他们有什么区别呢?”
- charles:“Socks 代理只是简略地传递数据包,而不用关怀是何种利用协定(比方 FTP、HTTP 和 NNTP 申请)。所以,Socks 代理比其余应用层代理要快得多。而浏览网页时的代理服务器通常是 http 代理呦!”
- 小明:“哈哈,我懂了,那我能浏览网页,不等于我肯定能够通过 Socks 拜访 Internet 对吗”
- charles:“对的,socks 要比 http 宽松的多!”
- 小明:“既然 charles 学生管理网络,那么您肯定有办法存储这些网络申请信息吧?”
- charles:“当然,我最重要的绝活就是记录,所有的申请和响应都会记录到 session 中,供大家稍后检查和 剖析。你关上菜单栏中的 File,在这里能够治理您的 session,包含新建,关上,清空等等。”
- 小明害羞的问:“我可不可以敞开记录呢,等我须要的时候再关上,这样我就能偷偷做一些鲜为人知的事!”
- charles 会心的笑了笑:“如果敞开记录,Charles 会失常通过所有申请,但它们不会记录在 session 中,你能够点击上面来敞开记录。”
- 小明:“charles 学生,我发现在主界面,有两个抉择 ’Structure’ 和 ’Sequence’,它们两个有什么区别呢?”
- charles:“哈哈哈,这可是我的双面镜!我提供了两种显示方式,你能够在 view->structure/sequence 中切换,也能够在界面中间接切换”
- charles 喝了口茶:“最大的区别是,构造视图提供树图显示,而程序视图则是以工夫程序展现”
- 小明:“原来是这样,我看视图下有很多相似链接的货色,都看花眼了,快把您的老花镜借我用用”
- charles 急忙藏好老花镜:“这可不行,不过,我能够教你一个筛选它们方法,这些相似链接的货色是 host 名,如果你右键 host 名,会呈现一系列对应的操作,比方保留和对焦,这个对焦 (focus) 的意思是只关注咱们想要的信息。”
- charles:“对焦操作能够让过滤掉没用的信息,比方我只想关注 baidu,我能够对百度 host 进行 focus,这样那些非百度的 host 就会被折叠,就会呈现上面这样”
- 小明放下偷来的老花镜:“哇,太好了,老花镜还您!”
- charles:“哇呀呀,偷我货色,气死我了!”
- 小明盯着屏幕看了很久:“这些蓝条好丑陋!”
- charles 昂首挺胸:“那当然,这是 chart,我最漂亮的中央,chart 次要记录了一个资源的生命周期:从申请到期待到响应申请,不仅如此,它还将相干资源分组,比方上面的 4 张图片是一组。”
- 小明:“利用 chart,就能晓得申请在哪破费工夫长了,不会傻傻的期待了!”
- 小明:“既然 charles 学生这么厉害,能够胡作非为的抓取网络申请,那您会不会被警察叔叔抓起来呢?”
- charles 丝毫不缓和:“咱们做的都是非法操作,我有本人的证书,称之为:Charles Root Certificate,在抓取数据时,你很可能会收到对于证书的正告,那很失常,你只须要信赖它即可,如果你想一劳永逸,永恒信赖 Charles Root Certificate 的话,你能够依照上面的链接来操作”
信赖 Charles Root Certificate:https://www.charlesproxy.com/… - 小明:“这样啊,那证书和 SSL 有什么关系呢”
- charles:“你其实在问 SSL 的工作原理,其实我是中间人,替浏览器查看服务器的证书并签名,但同时会把本人的证书发给浏览器,因而会呈现正告,你须要增加到信赖序列能力失常应用,上面的一张图清晰明了”
- 小明:“哈哈,charles 老爷爷是一个小能手”
- charles:“胡说,怎么能叫爷爷呢,人家明显不到 30 岁”
- 小明:“这样叫,比拟亲切”
- 小明:“明天好累呀,我要反复发送申请给同学,他如同睡着了, 始终没回我音讯!”
- charles:“哎呀,小明,你怎么能一条一条的手动发送呢,我可是有超级工具:负载测试,你右键 host 名 ->Advanced Repeat,关上它!”
- charles:“这个工具有几个难懂的参数,Iterations 很容易了解,就是你要发送的次数,Concurrency 是并发等级,示意拜访该站点的用户数量,以及迭代次数。”
- 小明:“那我设置发送 10 次,并发等级为 1,发送!”
- charles 此时会关上一个新的 sesscion,并且发送了 10 次,每次都有对应的具体音讯!
- 小明:“我写的软件好奇怪,在网络好的时候没问题,但信号差的时候显著卡顿,看来我只能始终蹲在卫生间(信号差)调 bug 了”
- charles:“哈哈哈,傻孩子,我就自带弱网工具呀,在 Proxy->Throttle Settings 下,应用前要记得勾选 Enable Throttling。”
- charles 顿了顿:“如果你想指定网站,能够勾选下图中的 Only for selected hosts,而后在对话框的下半局部设置中减少指定的 hosts 项。”
- 小明有点晕了:“这些参数,好多,好简单!”
- charles 笑着摸摸小明的头:“小明,人就是这么成长的,总不可能一帆风顺,缓缓用心听,你能够在 Throttle Preset 下选择网络类型,比方抉择 56 kbps modem 便能够升高网速,而选项的含意,我会在上面列出来”
Throttle Settings 视图中的选项含意如下:
1.Bandwidth:带宽
2.Utilistation:利用百分比
3.Round-trip:往返提早
4.MTU:字节 - 小明:“charles 爷爷,我用过的很多 IDE 都自带断点调试性能,您这里有吗?”
- charles:“断点可是十分重要的工具,怎能没有!你关上 Proxy->Breakpoints Settings,勾选 Enable Breakpoints 就能够启用断点模式,抉择 Add,而后填入须要监控的 Scheme、Procotol、Host 和 Port 等信息,这样就达到了设置断点的目标。或者能够在某个想要设置断点的申请网址上右击抉择 Breakpoints 来设置断点。”
- 小明皱了皱眉:“然而这样好麻烦呀,每次都要设置 Scheme、Procotol、Host 和 Port 吗”
- charles:“当然不是,你也能够通过右键 host 名,抉择断点”
- 小明拍了拍手:“哇,好棒,我肯定要多试试这个断点性能”
- charles:“其实我不仅仅是个代理工具,也能够做到反向代理”
- 小明困惑的看着 charles:“什么是反向代理呀”
- charles:“反向代理就是客户端想拜访服务器,他会优先拜访代理服务器,当 proxy 关口拿到用户申请的时候会转发到代理服务器中的随机某一台。而在用户看来,他只是拜访了 Proxy 服务器而已”。
- 小明:“那就是说,反向代理就是服务器的代理,客户端基本不晓得服务器的存在,只晓得代理服务器的存在啦!”
- charles:“是这样的,你能够在 Proxy→Reverse Proxies Settings 找到这个性能,这可是很罕用的,特地是对于本地开发且须要域名的状况下”。
- charles:“这个截图的意思是 将本地 57689 端口映射到 www.baidu.com 域名的 80 端口“
- 小明坏笑:“好困扰,我手机中有很多网络游戏,我可不可以让 charles 爷爷帮我看看网络游戏有什么数据包呢,我能不能改一改?”
- charles:“又在打什么坏留神了,我其实能够抓手机上的数据,但电脑和手机须要在同一个 wifi 网络”
- 小明兴奋的看着 charles:“真的吗,我该怎么做,快教教我”
- charles 无奈的摇了点头:“你要关上 Proxy->Proxy Settings,填入代理端口 8888,并勾上“Enable transparent HTTP proxying”即实现了代理”
- charles:“而后,你须要在手机 wifi 网络中增加代理,输出电脑 IP 和 charles 的端口号:8888,就能够抓手机上的网络数据了!”
- 小明:“太好了,我要去试一试”
10 分钟后 … - 小明:“charles,我抓到数据,但为什么是 unknown 呢”
- charles:“明明是你没听我讲完,就本人动手做,你这个是 http 数据,如果想要抓取 http 包,你须要上面这样做”
重点来了,咱们久违的 https 终于出场了,charles 靠一张证书就解决了加密问题,具体怎么做呢?如果应用的是电脑,依照上面这样装置证书:
抉择后,就会呈现证书下载,下载胜利后会电脑”钥匙串拜访“中看见 (这里我曾经装置并信赖过了),而后双击下载的证书,勾选信赖即可。
如果应用的是手机:
在 SSL Proxying 中勾选 Install …Mobile Device 会弹出一个框,用手机 (处于代理状态下) 登陆指定的 url 下载证书即可。
这时候你抓 https 的时候还是发现不行,乱码加 unknown(如下图)
这时候咱们还须要一步操作,就是将想要抓的 https 退出到 SSL 代理中,这样能力被 Charles 辨认并解析。
- 小明:“哇,是我太心急了,当初不呈现乱码了”。
Charles 的重定向性能分 Map Remote 和 Map Local 两种,顾名思义,Map Remote 是将指定的网络申请重定向到另一个网址申请地址,Map Local 是将指定的网络申请重定向到本地文件,上面用一个例子具体阐明一下。
5. 先保留接口返回数据(右键单击某接口保留为 html 格局,如下图)
6. 对本地的 html 进行批改
7. 设置 charles 进行 map local
8. 此时再次申请百度
在 Charles 的菜单中,抉择“Tools”->”Map Remote”或“Map Local”即可进入到相应性能的设置页面。
9. 设置参数 Toos->Map Remote
10. 查看拜访后果,你会发现,www.baidu.com 会被重定向到 www.sougou.com
Rewrite 性能性能适宜对某一类网络申请进行一些正则替换,以达到批改后果的目标。
11. 关上 Tools->Rewrite,对内容进行替换,上面把页面中“我的关注”替换为霍格沃兹
12. 再次申请百度
- fake:示意造一个假的,但能够 work。比方用 hashmap 算法代替数据库,一样能够查问 / 批改数据。charles 利用了 map remote 实现 fake 操作。
图片起源网络,侵权即删 - stub:对无限的行为作预约义回复,咏春拳的木人桩就是 stub,无论怎么打,木桩都是雷打不动。比方无论申请什么,返回都是 ok,这是一个十足的骗子,charles 利用 maplocal 实现 stub 操作。
- mock:能够了解为更高级的 stub,可自定义行为,charles 利用 rewrite 实现 mock 操作。
- proxy:代理。charles 利用反向代理实现 proxy 操作。
以上便是对 fake,stub,mock,proxy 的介绍,你能够了解为坑蒙拐骗,所以 charles 并没有咱们设想的那样凶恶。
不过,他也有本人的好兄弟:requests。因为文章字数无限,下一篇我将介绍 requests,并向您展现 charles 与 requests 的完满组合。
cahrles 是一位称职的网络管理员,本文章从界面到重要性能,零碎的介绍了 charles 工具的应用。
应用 charles,你不仅能够在电脑端收发网络数据,甚至能够在手机端收发网络数据。每个学习者都是小明,对新软件充斥了好奇,但事实中是没有 charles 学生的,所有的疑难须要本人摸索,本人学习,只有本人入手失去的,才是本人的。