静态注入器是HttpCanary最强大的功能之一,可以实现对Http请求数据和响应数据的拦截修改。静态注入器需要先选定一个请求,然后对其进行预编辑,编辑完成后便可对后续的相同请求进行自动修改。
比如App发往服务器的请求为:https://test.com?city=beijing ,我们可以使用HttpCanary的静态注入器将参数值beijing修改为nanjing 。对App的开发和测试而言,可以模拟很多不同场景的请求,来提高测试效率。
本篇文章将详细讲解如何使用静态注入器。
测试请求范例
https://www.apiopen.top/weatherApi?city=北京复制代码
创建静态注入器
首先,长按抓包记录,在弹框中选择“静态注入“,然后给注入器命名(方便后面对注入器进行管理)。
命名完成后,进入注入器编辑界面。编辑页面会展示出此请求的所有Http协议数据,包括请求行(Start Line)、请求头(Headers)、请求体(Body)、状态行(StatusLine)、响应头(Headers)、响应体(Body)。
左边Tab是请求数据,右边是响应数据。
关于Http协议的报文结构,下面这张图做了详细描述(图中非范例请求数据),更多内容请见:https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages
在了解Http协议报文之后,我们下面开始讲解如何使用注入器修改数据。
1. URL参数修改
我们希望将请求参数city的值由北京修改为南京。
https://www.apiopen.top/weatherApi?city=南京复制代码
只需要点击”city=北京“这个参数区域。
打开URL参数编辑页后,将参数值由北京改为南京,并保存。
修改完成后,返回注入器页面。city前面的点颜色由灰色变为绿色,表示参数是修改状态。即如果后续相同请求参数中包含city参数,其值会被强制替换成南京。
点击右上角完成注入器的创建。
下面我们重新用AppTest应用发送一条相同的请求,来测试修改是否能生效。抓到包后,打开抓包内容详情:
由于南京是中文,作为URL一部分会被Encode,不怕,我们点击这个URL打开URL预览页:
我们最后再来看看响应数据,确认下是否是真的生效了。
完美!
2. URL参数添加和删除
如果我们希望将请求修改为这种:
https://www.apiopen.top/weatherApi?province=江苏&days=7复制代码
即删除city参数,新增province和days参数。
同样先按照上一步的步骤打开静态注入器编辑页面。点击city参数右侧的三个点按钮,打开功能选择弹框,一共有三个选项:跟随,自定义,禁用。
这里解释下三个选项的含义。
- 跟随,表示使用原始数据,不做任何修改(默认选项),颜色为灰色。
- 自定义,表示强行覆盖或添加设定的参数值,颜色为绿色。
- 禁用,表示强行删除此参数和值,颜色为红色。
所以,删除city参数,我们选择禁用选项,注意参数前面的点变成了红色。
下一步,点击新增按钮添加两个参数,province=江苏和days=7。
点击右上角保存,完成注入器创建后,我们重新再发一条请求,看看效果。
很明显,city参数没有了,多了province和days两个参数。
完美!
3. Headers修改、添加和删除
同上面URL操作相同,参考1和2,不再赘述。
4. 响应行(Status Line)修改
Http协议中响应行用来表示请求服务的结果状态,比如常用的200表示成功,404表示资源未找到,500表示服务器异常等等。
有的时候为了测试一些极端情况,比如服务器不返回200而是404,App状态是否会出现bug等。我们可以使用HttpCanary来强行修改响应行中的状态码来实现这种效果。
点击编辑按钮,打开列表,其中列出来几乎所有常用的响应行(都是标准响应行),我们从列表中选择404 Not Found。
选择后自动返回,如果想撤销操作,点击右边复位按钮。
我们点击右上角保存按钮完成注入器的创建,重新用AppTest应用发送一条相同请求。从下图中能看出,后面接收到的请求已经是404 Not Found了。
完美!
5. 请求/响应体(Body)修改
在App实际开发和测试中,修改请求数据和返回数据是最经常用到的。比如,测试地理位置相关接口时,需要修改经纬度;再比如,服务器返回了某些时间戳,我们希望将其延长或者缩短。
同样以此天气接口为例,希望将响应体中的yesterday的high改为100℃,low改为-100℃,type改为冰雹
打开创建静态注入器的页面后,拉到最下面。点击右侧向上的箭头,选择编辑方式。
静态注入器提供了两种方式用来编辑Body:上传文件和直接编辑。如果Body是二进制格式数据(比如音频、视频、ProtoBuffer等),HttpCanary内置的文本编辑器是无法处理的,只能使用上传文件的方式。如果Body是json、xml、fromdata等文本格式,可以使用直接编辑。
由于接口返回的天气数据是JSON格式,我们可以使用直接编辑选项,打开后直接进行数据修改。
保存后完成静态注入器的创建,用AppTest应用再发送一条相同请求,来看看结果。
修改成功!完美!
5. 静态注入器管理
静态注入器和我们常用的断点(BreakPoint)方式修改数据不同,它是通过预设的方式来拦截和修改数据,可以极大地提高数据修改的效率。
HttpCanary可以对一个请求配置多个静态注入器,按照先配置先生效的原则进行拦截处理。静态注入器一旦创建了,将会以Mod的形式作为插件功能存在于HttpCanary中,即使是杀掉HttpCanar APP后再重启也能生效。
那我们如何对注入器进行管理呢?打开设置->模组管理页面,能看到所有创建的静态注入器。
点击进入详情后,能看到注入器是属于哪个请求的。
如果需要删除或者禁用已经创建的静态注入器,只需要在列表页长按打开功能选项即可!
结语
如果您对HttpCanary有任何疑问或者建议,可以访问并创建issue!
静态注入器的使用指南到此结束,感谢您的阅读!