HttpCanary使用指南——静态注入器

静态注入器是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有任何疑问或者建议,可以访问HttpCanary Github并创建issue!

静态注入器的使用指南到此结束,感谢您的阅读!


作者:MegatronKing
链接:https://juejin.im/post/5c795b6d51882523f026826b
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
posted @ 2019-12-05 10:32  Sendige  阅读(11845)  评论(0编辑  收藏  举报