Apifox 中接口返回的图片验证码怎么显示?

Apifox 中接口返回的图片验证码怎么显示?

Apifox 中不能够直接识别图片验证码的具体内容,所以如果需要将验证码作用于其它接口,需要手动发起请求将验证码获取,并手动填写到其它接口(如登录接口)中。又或者,你可以在接口中直接写死一个值,并让后端根据 ip 开放白名单,一般在测试阶段可以这么做。


下面来介绍一下在 Apifox 中显示图片验证码的几种情况。

二进制流格式

针对二进制流格式的验证码,Apifox 会尝试将其解析为图片并显示出来,不需要作其它特殊处理。这通常是因为 Apifox 的响应控制台跟浏览器一样,能够识别内容类型,并将其正确解析。


二进制数据:

Apifox 图片验证码显示

自动解析后的图片验证码:

Apifox 图片验证码显示

Svg 格式


后端有时候也会返回 JSON 格式的内容,并将验证码以 Svg 格式携带在 JSON 中返回,例如:

{
  "code": 0,
  "message": "ok",
  "data": {
    "img":'<svg width="104" height="50" xmlns="http://www.w3.org/2000/svg">
      <rect width="100%" height="100%" fill="#e3fafc" />
      <linearGradient id="bg" x1="0" x2="0" y1="0" y2="1">
        <stop offset="5%" stop-color="#02AAB0" />
      ……………………………………
      ……………………………………
    </svg>'
  }
}


这个时候就需要在【后置操作】中编写脚本,将内容提取出来,并对 Svg 格式的图片进行可视化渲染,其步骤如下:


第一步,根据返回的 JSON 响应获取图片数据(图片路径),并通过 btoa()  方法将其转化为 Base64 编码:

// 获取SVG图片数据
let svgContent = pm.response.json().data.img;

// 将SVG内容转换为Base64编码
let imgBase64 = `data:image/svg+xml;charset=utf-8;base64,${btoa(svgContent)}`;

第二步,添加 HTML 模板,该模板用于渲染图片。模板中使用 {{}} 包裹变量:

// html 模板
let template = `
    <img src="{{imgBase64}}" />
`;

第三步,应用pm.visualizer.set() 函数,将模板以及数据传入:

// 设置 visualizer 数据。传模板、解析对象。
pm.visualizer.set(template, { imgBase64 });

其结果如下,在控制台点击 Visualize 即可查看:

Apifox 图片验证码显示

Base64 格式


后端有时候也会以 Base64 格式返回图片验证码,通常会将 Base64 携带在 JSON 中返回,例如:

{
  "code": 0,
  "message": "ok",
  "data": {
    "img":'iVBORw0KGgoAAAANSUhEUgAAAMgAAABkCAIAAABM5OhcAAABrklEQVR4nO3dwW3CQBRAQYhSAY1CKdAoNeSAZBE7QSThAWFnTmaFjaV9+vaN9f64X8GtvT36BnhNwiIhLBLCIiEsEsIiISwSwiIhLBLCIiEsEsIiISwSwiIhLBLCIiEsEsIiISwSwiIhLBLCIiEsEsIiISwSwiIhLBLCIiEsEsIiISwSwiIhLBLCIiEsEsIiISwSwiIhLBLCIiEsEsIiISwSwiIhLBLvj76BZ7Hd7Kbjw3H/5crlc6fvTCdeWHl5Q0ys7WZ32trTwXkxk8NxP9v15cqFK5+vrD6nuVwZwYgTa7bHP5ois7OumW3jTKlzQ0ysk/Pt/90Uuf6s5cNxtvLyBgpruanRg2nZ0PRU9SgcQjE/pqqWBzf/rWe2HuE/oWd7PDtefvzO7AqrKybQX97n/rUhwuL+BnrH4p6ERUJYJIRFQlgkhEVCWCSERUJYJIRFQlgkhEVCWCSERUJYJIRFQlgkhEVCWCSERUJYJIRFQlgkhEVCWCSERUJYJIRFQlgkhEVCWCSERUJYJIRFQlgkhEVCWCSERUJYJIRFQlgkhEVCWCSERUJYJIRF4gNUBXa6R3p1qwAAAABJRU5ErkJggg=='
  }
}

要在 Apifox 中可视化,也是跟 Svg 的可视化一样,通过【后置操作】来编写脚本来进行渲染。参考代码如下:

// 获取图片数据
let svgContent = pm.response.json().data.img;

// 将图片转换为Base64编码
let imgBase64 = `data:image/png;base64,${svgContent}`;

// html 模板
let template = `
    <img src="{{imgBase64}}" />
`;

// 设置 visualizer 数据。传模板、解析对象。
pm.visualizer.set(template, { imgBase64 });
Apifox 图片验证码显示


关于可视化渲染这一块,你可以参考这篇文章:【Apifox 的可视化响应功能,让你的接口数据一目了然

总结

Apifox 通过后置操作脚本实现验证码的可视化渲染。针对不同格式的验证码,如 SVG 或 Base64,脚本将提取数据并转换为可渲染的图片格式,然后通过 HTML 模板和pm.visualizer.set()函数实现在控制台中的显示,从而方便用户直观查看验证码。

知识扩展:

订阅
qrcode

订阅

随时随地获取 Apifox 最新动态