前言
博主JAVA开发工程师
一枚。
最近两年工作基本上都是前后端分离~
之前做电商项目,版本开发过程中,App开发同事(安卓/IOS)都会打一个测试包给我们,对自己开发的那部分接口进行自测。然而,App调试不同于Web开发,打开F12,就能看到每一个请求的详细信息(接口名,参数,响应),所以需要通过抓包
,进行调试。
常用的抓包工具有Fiddler
和Charles
两种
编辑Fiddler的FiddlerScript脚本,代理请求到本地
使用场景:
实际抓包调试过程中,因为手机安装的app调用的接口都是测试环境的,现在为了安全,一般都是https请求。那么,如果要调试我们本地的接口,可以编辑Fiddler的FiddlerScript脚本,新增rule,替换对应的请求url。
例如:https://dev.aliyun.cn/core 替换成 http://127.0.0.1:8080/core,
https://dev.aliyun.cn/pay 替换成 http://127.0.0.1:8081/pay ,从而访问到我们本地
我们只要一小段 FiddlerScript 代码就能完成此功能:
// 自定义规则:
if (oSession.isHTTPS && oSession.HostnameIs("ops.qncloud.cn")) {
// 将https 替换为 http
oSession.oRequest.headers.UriScheme = "http";
// 替换链接(部分替换,这里将域名替换为127.0.0.1:8081
if (oSession.url.IndexOf('ops.qncloud.cn/sdm')>-1) {
oSession.url = oSession.url.Replace('dev.aliyun.cn/pay', '127.0.0.1:8081/pay');
}
if (oSession.url.IndexOf('ops.qncloud.cn/helpdesk')>-1) {
oSession.url = oSession.url.Replace('dev.aliyun.cn/core', '127.0.0.1:8080/core');
}
}
添加的位置:在 FiddlerScript 标签里搜索 OnBeforeRequest 方法,加到最上面即可:
记得在 Options -> HTTPS 里选中 Decrypt HTTPS traffic。并且修改之后,一定要点一下Save Script 按钮才会生效
重新操作app,看看有没有访问到本地???
下面博主只做记录,读者不必阅读!!!
原理
简单讲,Fiddler相当于一个代理,当客户端发送 http/https
请求 给服务器的时候,Fiddler 拦截到请求,我们可以对请求的相关数据进行自定义(如更改请求参数,请求url等),然后Fiddler按照我们自定义的形式去请求服务器,最后把服务器的响应返回给客户端。
这整个过程就叫抓包。我们可以分析抓包得到的数据,进行调试。
了解了Fiddler大致的工作流程,接下来,本篇博客后面部分主要介绍对IOS进行抓包(转载其他博客)
Fiddler的安装和配置,网上教程很多,我这里就不再重复码字了,转载一篇写得很详细的博客,如下:
以下内容均为转载,原文博客地址:使用Fiddler进行iOS APP的HTTP/HTTPS抓包
拦截指定链接,过滤指定链接:Fiddler简单使用教程
一、PC上安装Fiddler
步骤略。
二、Fiddler配置(配置完后记得要重启Fiddler)
打开Fiddler, Tools-> Fiddler Options 。
选中"Decrpt HTTPS traffic",Fiddler就可以截获HTTPS请求
选中"Allow remote computers to connect".是允许别的机器把HTTP/HTTPS请求发送到Fiddler上来
三、手机配置
(1) 网络代理设置
安装Fiddler的机器,跟iPhone 必须在同一个网络里, 否则iPhone不能把HTTP发送到Fiddler的机器上来。一般情况,我们手头上是台式机和手机,台式机只有网线,没有无线wifi,所以和手机不在同一个网络,这时,我们就需要设置代理了
打开iPhone, 找到你的网络连接, 打开HTTP代理, 输入Fiddler所在机器的IP地址(比如:192.168.1.104) 以及Fiddler的端口号8888
(2) Fiddler证书安装
这一步是为了让Fiddler能捕获HTTPS请求。 如果你只需要截获HTTP请求, 可以忽略这一步
- 首先要知道Fiddler所在的机器的IP地址: 假如我安装了Fiddler的机器的IP地址是:192.168.1.104
- 打开IPhone 的Safari, 访问 http://192.168.1.104:8888, 点"FiddlerRoot certificate" 然后安装证书
现在大功告成,可以抓包了。iPhone上的应用(比如Safari, Firefox, Itunes, App Store)发出的HTTP/HTTPS都可以被Fiddler获取。
实例:打开Safari,
3. 输入http://www.cnblogs.com/tankxiao. 看看Fiddler能否捕获。
4. 输入https://dynamic.12306.cn/otsweb/ 看看Fiddler能否捕获。
是不是HTTP和HTTPS都截获到了?, 你不但能截获, 还可以下断点,修改Request, 修改Response, Do what you want.
四、注意事项
(1)用完了, 记得把IPhone上的Fiddler代理关闭, 以免IPhone上不了网。
(2)只能捕获HTTP,而不能捕获HTTPS的解决办法
有时候会发现, Fiddler 只能捕获IPhone发出得HTTP请求, 而不能捕获HTTPS请求, 原因可能是证书没有安装好。 解决办法是:
5. 先把IPhone上所有的Fiddler证书删除 (拿出IPhone, 点”设置“->“通用”->“描述文件”)
6. 安装上面的方法,重新安装Fiddler证书
其他操作:
左下角黑色命令行:
语法:
替换:urlreplace www.demo.com www.dev.demo.com (注意,只能替换一种规则,且替换的链接中不能带http:)
清除:urlreplace