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;
    }
}
相关推荐
2501_930707784 小时前
使用C#代码替换 PDF 文档中的文本
pdf
1candobetter7 小时前
JMeter 常见功能在调试阶段与正式压测阶段的使用建议
jmeter·压力测试
周末也要写八哥8 小时前
Visual C++6.0下载安装流程及PDF学习手册资源
c++·学习·pdf
优化控制仿真模型8 小时前
2026初中英语考纲词汇表(1600词)PDF电子版
经验分享·pdf
2401_8769641310 小时前
27考研优路|肖睿|唐辛|师大集训营|大牙|B站橙啦101公共课PDF
考研·pdf
2401_8769641310 小时前
27余峰|苏一|大李子|鹿吖101公共课托管班网课PDF
pdf
SEO-狼术10 小时前
Visualize Trends with Bar Charts
pdf·.net
Demon1_Coder10 小时前
微服务-jmeter
jmeter
私人珍藏库10 小时前
【PC】[吾爱大神原创工具] PDFImageViewer V1 永久免费的PDF图像查看和导出工具
windows·pdf·工具·软件·多功能
小饕10 小时前
RAG 数据加载全攻略:从文本到 PDF 的 Loader 选型指南
人工智能·pdf