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;
    }
}
相关推荐
Lyn_Li3 小时前
扫描 PDF 歪了怎么办?用 6 种检测方法做本地批量扶正(附开源工具)
python·pdf·ocr·tesseract·开源工具·文档处理·本地处理·扫描件纠偏
Mr.Daozhi18 小时前
从零构建 AI 学术论文助手(四):PDF.js 实时截图 + Gemini 视觉分析
javascript·人工智能·pdf·canvas·pdf.js·gemini
wenxin77wx2 天前
3步部署OlmOCR:一行命令将PDF转为LLM训练数据
pdf·- olmocr
2501_930707782 天前
PDF 转 Markdown:在线与离线转换完整指南
pdf
ShiXZ2132 天前
PDF-OCR文件识别篇(七):数据入库
java·pdf·json·ocr·springboot
hong78173 天前
西门子触摸屏PROSAVE传输PDF组件没有选项
pdf·触摸屏·西门子
王莎莎-MinerU3 天前
当 RealDocBench 开始追问字段级问答,MinerU 为什么更适合做知识库与科研 Agent 的文档验收层
大数据·人工智能·算法·pdf·ocr
weixin_3975740919 天前
PDF复杂表格的1:1还原引擎:跨页表格自动拼接技术实战
大数据·人工智能·pdf
Metaphor69219 天前
使用 Python 将 PDF 转换为 HTML
python·pdf·html
2601_9618451519 天前
粉笔行测5000题电子版|pdf|解析
pdf·新媒体运营·github·个人开发·内容运营·规格说明书·极限编程