jmeter下载base64加密版pdf文件

一、何为base64加密版pdf文件

如下图所示,接口jmeter执行后,返回一串包含大小写英文字母、数字、+、/、=的长字符串,直接另存为pdf文件后,文件有大小,但是打不开;另存为doc文件后,打开可以看到和接口响应一致的长字符串。

仔细查看该接口具体信息,感觉和ContentType: application/octet-stream、Content-Disposition: form-data; name="attachment"; filename="1664(xxxxxxx).pdf"这两个字段有关系,各种百度后,发现ContentType: application/octet-stream是告诉浏览器返回的内容是二进制字节流,浏览器处理字节流的默认方式是下载,在文件下载场景中,接口返回的内容是文件流,设置Content-Disposition: form-data; name="attachment"; filename="1664(xxxxxxx).pdf"后,浏览器会进行下载,且下载的文件名称为 1664(xxxxxxx).pdf。

Application/octet-stream是应用程序文件的默认值。意思是未知的应用程序文件,浏览器一般不会自动执行或询问执行。浏览器会像对待,设置了HTTP头Content-Disposition值为attachment的文件一样来对待这类文件,即浏览器会触发下载行为。

参考的链接:application/octet-stream-CSDN博客HTTP请求头Content-Type总结说明_content-type: application/octet-stream-CSDN博客

从上可知,接口返回后浏览器需要进行一些操作,若想jmeter直接将响应另存为文件,百度了下可以添加BeanShell PostProcessor组件,获取接口响应结果,另存为pdf文件,结果另存的pdf文件打不开,但是显示大小为480KB,这是为啥呢?

接口响应这么一长串字符串,百度百度,感觉该长字符串是base64加密了,向开发确认后,开发提供了一个在线base64编码转pdf的网页,第一次将响应内容粘贴进去,点击查看pdf后,看不到pdf文件,将长字符串两端的双引号删除后,再次点击查看pdf后,pdf显示正常了;在线base64编码转pdf的网页链接如下:Base64 to PDF | Base64 Decode | Base64 Converter | Base64Convert Base64 to PDF online using a free decoding toolhttps://base64.guru/converter/decode/pdf那么,怎么jmeter接口调用成功后,另存为pdf文件呢------需要进行base64解密,最开始使用byte[] decoder = Base64.getDecoder().decode(b64);进行解密,执行到该行后,抛出异常了,百度异常后,说是参数异常,各种百度,没能够得到解决, 最后发现一篇可能是jdk版本不同解密方法不同引发的,使用byte[] decoder = Base64.getMimeDecoder().decode(b64)试试看,哇我解密成功,另存的pdf打开正常。

参照的链接:application/octet-stream-CSDN博客

二、base64解密另存为pdf文件

如下图所示,在需要下载pdf文件的接口下,添加BeanShell PostProcessor组件,获取接口响应结果,进行base64解密后,另存为pdf文件。

如上图所示,点击右上角的log面板图标,可以打开log面板,log.info、log.error可以给jmeter log面板输出自己需要显示的调试信息,以便调试代码,具体的代码如下。

java 复制代码
import java.io.File;
import java.util.Base64;
import java.io.FileOutputStream;

//获取接口响应结果
//String responseData = prev.getResponseDataAsString();
byte[] responseData1 = prev.getResponseData();


//定义导出pdf文件目录及文件名称
private String filePath = "D:/Tools/apache-jmeter-5.4.1/workspace/导出-${index}.pdf"; 
File file = new File(filePath);
FileOutputStream fos = new FileOutputStream(file);
try {
    //log.info("----------1------------");
    //log.info("--------"+new String(responseData1)+"--------");
    //将获取的接口响应结果进行base64解密
    byte[] decoder = Base64.getMimeDecoder().decode(responseData1);
    //log.info("----------2------------");
    //将解密结果写入pdf文件
    fos.write(decoder);
    //log.info("-------PDF File Saved---------");
} catch (Exception e) {
    log.error("------error------------",e);
} finally {
    if (fos != null) {
    fos.close();
    fos = null;
    }
}
相关推荐
虎头金猫1 小时前
如何在Linux上使用Docker在本地部署开源PDF工具Stirling PDF:StirlingPDF+cpolar让专业操作像在线文档一样简单
linux·运维·ubuntu·docker·pdf·开源·centos
拓端研究室8 小时前
专题:2025人形机器人、工业机器人、智能焊接机器人、扫地机器人产业洞察报告 | 附158+份报告PDF、数据仪表盘汇总下载
microsoft·机器人·pdf
TextIn智能文档云平台10 小时前
复杂PDF文档结构化提取全攻略——从OCR到大模型知识库构建
pdf·ocr
会飞的小菠菜10 小时前
PDF文件中的广告二维码图片该怎么批量删除
pdf·删除·二维码·批量
一只花里胡哨的程序猿1 天前
odoo打印pdf速度慢问题
pdf·odoo
灵海之森1 天前
Python将md转html,转pdf
pdf
阿幸软件杂货间1 天前
最新PDF版本!Acrobat Pro DC 2025,解压即用版
pdf·adobe acrobat·acrobat
星空的资源小屋1 天前
网易UU远程,免费电脑远程控制软件
人工智能·python·pdf·电脑
会飞的小菠菜2 天前
如何一次性将多个PPT幻灯片批量转换成PDF文档
pdf·powerpoint·ppt·批量·格式转换
软测进阶2 天前
【超详细图文教程】2025年最新 Jmeter 详细安装教程及接口测试示例
jmeter