不求服务端,自己改接口!Charles抓包工具的应用

这篇文章主要是介绍 Charles 在开发阶段的使用方式,突出实用性,至于Charles 的介绍和配置,不是我们本文的重点,还没配置的同学可以参考这篇博文,很详细了:http://www.jianshu.com/p/fdd7c681929c

前言

作为移动开发工程师,平时开发阶段跟接口相关的工作都是要和服务端的小伙伴进行对接的,在对接的过程中一定会有一些不太方便的地方。

那么,今天我要给大家介绍一下「Charles」这款抓包软件,使用 Charles ,数据接口相关的接口和调试工作将变的高效、简单、痛快。

我将具体介绍「查阅接口数据」,「接口数据替换」,「请求重定向」这三个功能在具体开发时候的使用姿势。

查阅接口数据

我们平时开发的时候,经常要调试接口,需要看一下接口返回的数据。大部分的时候,我们是通过我们自己配置的 Log 系统来进行查阅,这种方式虽然是可以能达到我们的需求,但实际上还是比较麻烦的,一些准备工作和操作也比较多,那么我们现在拥有了 Charles,一切将变的简单粗暴,一目了然。

我们配置好了之后,所有的浏览器请求都会在 Charles 中显示,如果你的手机和模拟器也配置好了代理,那么同样,模拟器和手机走的所有请求也会被列出来。host 闪过一下黄色标记,表示这个 host 下有一个新的请求刚刚走过。

图中左侧是 Charles 抓到的所有包的汇总,以请求的 host 为分类,右侧是这个请求具体的信息,包括请求头,返回的数据以及和这个请求相关的所有信息,如果数据是 JSON 格式,那么它会自动的格式化,如果是图片流,也会直接把图片显示出来等等,你想要有关这个接口的一切,都能一目了然。

不过有时候,我们的请求有点太多了,我们需要观察的就是一些特殊的 host 的请求。比如在这里,我们希望看到的就是「www.jianshu.com」这个 host 下的请求,那么我们可以通过「Proxy->Recording Settings」来设置过滤项,不过我一般会直接右击需要的 host 选中 Force 进行筛选,如下图所示:

我们可以看到,这样其他的 host 都会被归类到「Other Hosts」中了。

这样,我们平时查阅接口信息就会变得简单粗暴了。

接口数据替换

我们平时在开发过程中会经常遇到一些情况。比如你已经开始写请求的代码了,但服务端那边的接口还没写好,你的逻辑可能已经写完却没有办法去测试验证,你只能干等或者通过自己在代码中添加一些假数据来模拟请求,耗时耗力。

或者虽然你接口和服务端调通了,但你想做一些边界值的测试,想修改请求返回的值或者参数,这不是一件容易的事,往往需要服务端的配合,如果我们能自己通过某种手段轻松的更改返回数据,岂不是一件能够帮助我们提高代码容错率的美事?

Charles 可以很轻易的办到。

我们现在用 Retrofit 写一段简单的请求代码:

这里的 getCall() 方法就是一个简单的 get 请求,完整的请求地址为: http://fy.iciba.com/ajax.php?a=fy&f=auto&t=auto&w=hello%20world

MessageBean 是这样的,我们定义了一个 show() 方法来打印出字段:

我们进入应用,在 Charles 中看到的数据是这样的:

在应用中的日志显示是这样的:

这时候,我们想修改下 from 字段的值该怎么做呢?很简单。只需在「Tools->Rewrite」中选择「Enable Rewrite」,再 add 一个「Rewrite Rule」,在里面填入你想替换的数据即可:

点击确定,我们重新请求一下,再看一下返回数据:

注意到了吗,返回的数据真正的被替换掉了,从此以后,我们自己也可以轻易模拟数据了!再也不用麻烦服务端的小伙伴了!

请求重定向

请求重定向是啥意思吧,我们设想有这样一个现实的场景:

服务端的童鞋先把数据的格式定义好了,比如上面的 MessageBean 具体的字段先给到我们了,然后给了我们一个测试地址和正式地址,但正式地址还没布好,我们只能先用测试地址来写逻辑和测试。

我们这个时候有了重定向,我们可以在写逻辑的时候,把请求的地址依然用的是正式地址,但通过使用 Charles 的重定向功能,我们在运行的时候,实际上走的请求是测试地址的请求,等到回头服务端的童鞋把正式环境布好的时候,我们不需要特意去代码中更改请求地址,减少了修改可能造成的出错可能。

还是举例上面的例子,我们刚刚请求的地址,我们也有日志打印出了它的返回 Response:

我们现在把这个请求重定向到 www.baidu.com 这个地址上,按理说如果重定向成功了,那么应该是返回百度首页 html 的页面代码数据,我们实际操作下看看:

我们将请求地址改成我们设置的地址:

现在我们重新运行一下,看一下请求日志:

我们发现,同样的地址,返回结果已经不一样了,返回的是百度首页的 html 代码了。

其他功能

Charles 还有非常多好用的功能有待大家自己去发掘,比如断点功能,重发请求功能。这里再说一个比较好用的功能,那就是模拟慢网的功能。对于我们平时开发来说,这个功能还是很实用的,很多时候,一些 bug 都是在这样的一种特殊情况才能复现。

打开方式就是「Proxy->Start Throttling」,同时通过「Proxy->Throttling Settings」可以进行更细致的网络设置。

总结

相信大家已经迫不及待的来使用 Charles 了,这款神器可以说是开发必备。当然,作为程序员,我们更应该了解到软件产品产出的不易,希望大家可以支持正版,尊重他人的劳动成果,从正规渠道进行购买哦

原文发布于微信公众号 - WeaponZhi(WeaponZhi)

原文发表时间:2017-10-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据科学与人工智能

【Python环境】Scikit-Learn:开源的机器学习Python模块

scikit-learn是一个用于机器学习的 Python 模块,建立在SciPy基础之上,获得3-Clause BSD 开源许可证。这个项目是由 David ...

23610
来自专栏Laoqi's Linux运维专列

高性能可靠服务集群架构

1743
来自专栏嵌入式程序猿

看官网一步步给你分析学习freeRTOS

在之前的公众号文章《freeRTOS源码目录结构分析》中我们简单介绍了源码目录结构,文件夹包含的内容,今天我们来分析下以NXP的kinetis K60塔式系统为...

3509
来自专栏大魏分享(微信公众号:david-share)

从开发角度看四类企业应用架构1: 通过Maven编译并运行一个Java应用

832
来自专栏开源项目

码云周刊:当测试拿起自动化测试工具,开发仿佛看见一场悲剧正在上演!

类型:自动化测试 虽然之前小一做过几年开发,但当时对于在公司兴起的自动化测试概念还不是很清楚,觉得是一种很神秘的东西,后来通过向业内资深的测试工程师朋友咨询才恍...

3289
来自专栏jessetalks

Windows平台分布式架构实践 - 负载均衡

概述   最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Linu...

2817
来自专栏BestSDK

开发必备,小程序常见错误与解决方法

也接触了不少人解决问题的过程里,有一些比较难以排查的可能性列举在这,方便大家看一下: 特别提示:为了排除问题所在,建议针对问题制作最简demo,以便最小化缩小其...

3627
来自专栏Danny的专栏

Web开发——服务器端应用技术简单比较

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

571
来自专栏鸡蛋君

[收集]网络上Shdowsocks&ShdowsocksR一键脚本整理

1674
来自专栏北京马哥教育

【图文并茂】一步步带你了解Web站点架构

1.1 http反向代理服务器 在web站点前端,我们需要搭建一个反向代理服务器,用于负责接受用户的请求,请求包括动态和静态的内容请求。一般反向代理服务器的部署...

4258

扫描关注云+社区