zoukankan      html  css  js  c++  java
  • 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
    来源:掘金
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    应届毕业生简历撰写技巧
    【LeetCode】- Longest Substring Without Repeating Characters
    线性规划
    什么是凸规划
    最优化算法 (一)
    香农定理和频谱效率
    虚函数的用法
    QT学习一
    努力!
    Qslider
  • 原文地址:https://www.cnblogs.com/Sendige/p/11987650.html
Copyright © 2011-2022 走看看