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

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Charles 整体界面

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

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Focus

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Other Hosts

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

接口数据替换

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

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

Charles 可以很轻易的办到。

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

//举个栗子!
private void request(){
Api.getDefault(HostType.MESSAGE)//HOST:http://fy.iciba.com/
.getCall()
.subscribe(new BaseObserver()){
@Override
protected void onSuccess(MessageBean entry) throws Exception{
entry.show();//请求成功展示数据
}

@Override
protected void onFailure(Throwable e, boolean isNetWorkError) throws Exception{

}
});
}

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

@GET(“ajax.php?a=fy&f=auto&t=auto&w=hello%20world”)
Observable getCall();

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

public class MessageBean {
public int status;

public content content;
public static class content {
public String from;
public String to;
public String out;
public String vendor;
public int errNo;
}

/** 定义 输出返回数据 的方法 */
public void show() {
LogUtils.i(“status:” + status + “\n” +
“from:”+ content.from + “\n” +
“to:”+ content.to + “\n”+
“out:”+ content.out + “\n” +
“vendor:”+ content.vendor + “\n” +
“errNO:”+ content.errNo);
}
}

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

JSON 数据

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Log

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

替换数据

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

更改后的数据 Log

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

请求重定向

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

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

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

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

下面分享的腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题全套解析,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,下面只是以图片的形式给大家展示一部分。

image

知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。

image

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

图片转存中…(img-e5ZG7BzI-1712694559676)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 26
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值