在App开发与后台联调过程中,经常会遇到后台数据返回不全,请求参数需要修改,请求需要重发等情况。
如果每次都在app端修改,或者自己造数据,会增加工作量,而且每次要重新运行app,浪费时间。
因此,经过研究,可以使用抓包工具charles,对app进行抓包,请求断点,修改请求与返回的数据,重新发送请求。
简单的抓包流程与charels设置这里不做过多介绍,这里举例子使用的是charles4.1.
首先看,主要的按钮介绍:
①重新发送指定请求:
在发送一次请求后,在左边列表选中该请求,点击如上图所示重新发送按钮即可模拟请求。
②请求断点:
点击如上图请求断点按钮,开启请求断点。进行过网络请求后,选中该请求,右键,点击breakPoint,设置该请求的断点。
断点设置成功,页面处于loading状态
然后再进行一次该地址的请求,便可在断点处修改请求参数与返回的参数。
第三步,点击Execute后,等数据返回进行修改response的数据,再次点击Execute,即可实现篡改返回数据来进行app的测试,eg:修改订单状态等。
转手机的包的步骤:
如果是使用charles抓包。一定要tm的保证手机和电脑连的是一个网。
1、proxy setting,查看Charles,端口
2, 勾选
3、ipconfig,查看自己电脑的ip地址
4、手机通过设置http代理服务器,连接到电脑服务器输入电脑的ip端口和charles的端口一致,
5、此时charles会给出提示。有新的连接。点击allow
6、连接成功,此时手机发送的内容,charles可以抓到。
Charles安装和抓包及报错
1.charles安装
下载charles4.0.1破解版,官方下载只能试用30天。网盘下载地址:https://pan.baidu.com/s/1eSwwvo2。(里面包括.dmg(用于安装)和.jar文件(用于破解))破解方法:在Finder的应用程序中找到Charles.app,右键选择“显示包内容”,之后进入Contents文件夹,接着进入Java文件夹,用破解文件(也就是jar文件)替换charles.jar文件。到此就破解了。
2.安装证书如果你需要截取分析 Https 协议相关的内容。那么需要安装 Charles 的 CA 证书。具体步骤如下。我们需要在 Mac 电脑上安装证书。点击 Charles 的顶部菜单,选择 “Help” –> “SSL Proxying” –> “Install Charles Root Certificate”,然后输入系统的帐号密码,即可在 KeyChain 看到添加好的证书。(如果证书是不信任的那就设置为信任)如下图:
双击Charles证书:
选择始终信任:
3.设置charles要截取 iPhone 上的网络请求,我们首先需要将 Charles 的代理功能打开。在 Charles 的菜单栏上选择 “Proxy”–>“Proxy Settings”,填入代理端口 8888,并且勾上 “Enable transparent HTTP proxying” 就完成了在 Charles 上的设置。如下图:
填入的端口号和 Charles中的Proxy Settings,一样
4.iPhone上面的设置。
首先我们需要获取 Charles 运行所在电脑的 IP 地址,Charles 的顶部菜单的 “Help”–>“Local IP Address”,即可在弹出的对话框中看到 IP 地址,如下图:在 iPhone 的 “ 设置 ”–>“ 无线局域网 ” 中,可以看到当前连接的 wifi 名,通过点击右边的详情键,可以看到当前连接上的 wifi 的详细信息,包括 IP 地址,子网掩码等信息。在其最底部有“HTTP 代理”一项,我们将其切换成手动,然后填上 Charles 运行所在的电脑的 IP,以及端口号 8888(若此时设置代理无效,则先忽略此网络,重新连接后再设置代理即可)。如下图:
5.安装手机证书
如果我们需要在 iOS 或 Android 机器上截取 Https 协议的通讯内容,还需要在手机上安装相应的证书。点击 Charles 的顶部菜单,选择 “Help” –> “SSL Proxying” –> “Install Charles Root Certificate on a Mobile Device or Remote Browser”,然后就可以看到 Charles 弹出的简单的安装教程。
注意:这边的fe80:0:0:0:aebc:32 这是ipv6的地址
在手机safari上面输入:chls.pro/ssl,安装文件。
通常这样就可以进行网络抓包了。但是这只是仅仅针对http请求。如果要抓取https请求,则还需要做第6步。我们先来看看没有做第6步的情况。对一个接口打上Breakpoints。在进行网络截取的时候会发现一直报错。
报Failed to parse headers:EOF reading HTTP headers,原因是不能截取https的网络请求。
加上第6步即可。此时如果碰到抓取到的https请求接口一直显示红色X<unknown>,则需要进行如下操作:设置->通用->关于本机->证书信任设置->针对根证书启用完全信任下的Charles Proxy CA开关打开。
6.勾选https的截取功能
Charles 默认也并不截取 Https 网络通讯的信息,如果你想对截取某个网站上的所有 HTTPS 网络请求,可以在该请求上右击,选择 SSL proxy,如下图:
这样,对于该 Host 的所有 SSL 请求可以被截取到了。当截取到网络请求红色箭头向下的时候即可改变网络接口返回的内容。比如此时可以将code码改为000001,data内容也可以做修改。
Charles模拟网络环境,限制网络速度 Charles Throtting
开启限制网络,直接在乌龟上操作,乌龟
亮了,表示开启了限制网络
Charles mock假数据
前端开发经常遇到自己逻辑写完了但是接口还没写好,还得等着接口,这时候就可以自己去造点假数据了。
一般后端先写完接口文档和前端定好数据结构才去写接口逻辑,
而在后端接口逻辑写完之前前端可能已经把前端的逻辑写好了,
需要相应的数据去铺页面,这时候我们就可以用Charles的mock功能在本地去模拟一些返回数据
实战经验:
IOS中实验,要以.json 结尾来处理,以.txt 结尾的不行
配置如下:
1首先保证手机和pc在同一网络环境下
2手机添加代理,主机名:pc的ip,端口:charles配置的端口号,我一般为8888
3在charles中右键某个要添加的接口选择最下面的Map Local,情况Query那行,然后选择本地json文件就可以了
android设置代理
操作路径:设置-->WLAN,选中网络长按(不同设备操作方式不一样,有些事点击更多按钮)-->修改网络-->高级选项,将代理选项设置为手动,在代理服务器主机名处填写你要设置的代理服务器IP,端口填写对应的端口(如Fiddler为8888),设置完毕后点击保存即可
通常情况下用第一种方式即可完成代理设置,不过有些android设备比较奇葩没法通过上述方法设置或找不到设置入口的情况下也可以通过adb指令的方式设置代理
设置代理的时候,一定要勾选高级选项,否则看不到设置代理的地方,如图上边的绿色勾选
当网络设置了vpn,用charles抓包,走的是android模拟器,操作模拟器,抓不到网络的链接,是因为网络没有给模拟器设置代理
如何为android模拟器设置代理
这边,然后退出模拟器,打开charles就可以监听到抓到模拟器的接口了
当你的电脑有用vpn 链接公司网络,你的手机在用charles代理链接你的电脑的wifi网络,有时候是连不上公司网络,那你可以先把公司的vpn关了,让手机代理charles链接你的wifi网络,链接成功以后,在vpn链接公司网络
charles显示这个提示的时候,一般是你链接代理的时候出现
用Charles抓包后,关闭,网络正常电脑无法打开网页。解决办法:
提示:正常情况下将wifi的代理 由手动重新设置成自动即可连接。
1 打开网络偏好设置
2 打开网络代理 (点击高级)
3 去掉代理中所有勾选项;
然后保存就可以了。猜测原因是请求被拦截了或者是使用Charles时改了部分设置!