怎样搭建一个个人网站,wordpress插件 stock,永修县建设局网站,网络科技公司注册一、何为base64加密版pdf文件
如下图所示#xff0c;接口jmeter执行后#xff0c;返回一串包含大小写英文字母、数字、、/、的长字符串#xff0c;直接另存为pdf文件后#xff0c;文件有大小#xff0c;但是打不开#xff1b;另存为doc文件后#xff0c;打开可以看到和…一、何为base64加密版pdf文件
如下图所示接口jmeter执行后返回一串包含大小写英文字母、数字、、/、的长字符串直接另存为pdf文件后文件有大小但是打不开另存为doc文件后打开可以看到和接口响应一致的长字符串。 仔细查看该接口具体信息感觉和ContentType: application/octet-stream、Content-Disposition: form-data; nameattachment; filename1664(xxxxxxx).pdf这两个字段有关系各种百度后发现ContentType: application/octet-stream是告诉浏览器返回的内容是二进制字节流浏览器处理字节流的默认方式是下载在文件下载场景中接口返回的内容是文件流设置Content-Disposition: form-data; nameattachment; filename1664(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面板输出自己需要显示的调试信息以便调试代码具体的代码如下。
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;}
}