一、何為base64加密版pdf文件
如下圖所示,接口jmeter執(zhí)行后,返回一串包含大小寫英文字母、數(shù)字、+、/、=的長(zhǎng)字符串,直接另存為pdf文件后,文件有大小,但是打不開;另存為doc文件后,打開可以看到和接口響應(yīng)一致的長(zhǎng)字符串。
仔細(xì)查看該接口具體信息,感覺和ContentType: application/octet-stream、Content-Disposition: form-data; name="attachment"; filename="1664(xxxxxxx).pdf"這兩個(gè)字段有關(guān)系,各種百度后,發(fā)現(xiàn)ContentType: application/octet-stream是告訴瀏覽器返回的內(nèi)容是二進(jìn)制字節(jié)流,瀏覽器處理字節(jié)流的默認(rèn)方式是下載,在文件下載場(chǎng)景中,接口返回的內(nèi)容是文件流,設(shè)置Content-Disposition: form-data; name="attachment"; filename="1664(xxxxxxx).pdf"后,瀏覽器會(huì)進(jìn)行下載,且下載的文件名稱為 1664(xxxxxxx).pdf。
Application/octet-stream是應(yīng)用程序文件的默認(rèn)值。意思是未知的應(yīng)用程序文件,瀏覽器一般不會(huì)自動(dòng)執(zhí)行或詢問執(zhí)行。瀏覽器會(huì)像對(duì)待,設(shè)置了HTTP頭Content-Disposition值為attachment的文件一樣來對(duì)待這類文件,即瀏覽器會(huì)觸發(fā)下載行為。
參考的鏈接:application/octet-stream-CSDN博客、HTTP請(qǐng)求頭Content-Type總結(jié)說明_content-type: application/octet-stream-CSDN博客
從上可知,接口返回后瀏覽器需要進(jìn)行一些操作,若想jmeter直接將響應(yīng)另存為文件,百度了下可以添加BeanShell PostProcessor組件,獲取接口響應(yīng)結(jié)果,另存為pdf文件,結(jié)果另存的pdf文件打不開,但是顯示大小為480KB,這是為啥呢?
接口響應(yīng)這么一長(zhǎng)串字符串,百度百度,感覺該長(zhǎng)字符串是base64加密了,向開發(fā)確認(rèn)后,開發(fā)提供了一個(gè)在線base64編碼轉(zhuǎn)pdf的網(wǎng)頁(yè),第一次將響應(yīng)內(nèi)容粘貼進(jìn)去,點(diǎn)擊查看pdf后,看不到pdf文件,將長(zhǎng)字符串兩端的雙引號(hào)刪除后,再次點(diǎn)擊查看pdf后,pdf顯示正常了;在線base64編碼轉(zhuǎn)pdf的網(wǎng)頁(yè)鏈接如下:Base64 to PDF | Base64 Decode | Base64 Converter | Base64Convert Base64 to PDF online using a free decoding toolhttps://base64.guru/converter/decode/pdf那么,怎么jmeter接口調(diào)用成功后,另存為pdf文件呢——需要進(jìn)行base64解密,最開始使用byte[] decoder = Base64.getDecoder().decode(b64);進(jìn)行解密,執(zhí)行到該行后,拋出異常了,百度異常后,說是參數(shù)異常,各種百度,沒能夠得到解決, 最后發(fā)現(xiàn)一篇可能是jdk版本不同解密方法不同引發(fā)的,使用byte[] decoder = Base64.getMimeDecoder().decode(b64)試試看,哇我解密成功,另存的pdf打開正常。
參照的鏈接:application/octet-stream-CSDN博客
二、base64解密另存為pdf文件
如下圖所示,在需要下載pdf文件的接口下,添加BeanShell PostProcessor組件,獲取接口響應(yīng)結(jié)果,進(jìn)行base64解密后,另存為pdf文件。
文章來源:http://www.zghlxwxcb.cn/news/detail-835682.html
如上圖所示,點(diǎn)擊右上角的log面板圖標(biāo),可以打開log面板,log.info、log.error可以給jmeter log面板輸出自己需要顯示的調(diào)試信息,以便調(diào)試代碼,具體的代碼如下。文章來源地址http://www.zghlxwxcb.cn/news/detail-835682.html
import java.io.File;
import java.util.Base64;
import java.io.FileOutputStream;
//獲取接口響應(yīng)結(jié)果
//String responseData = prev.getResponseDataAsString();
byte[] responseData1 = prev.getResponseData();
//定義導(dǎo)出pdf文件目錄及文件名稱
private String filePath = "D:/Tools/apache-jmeter-5.4.1/workspace/導(dǎo)出-${index}.pdf";
File file = new File(filePath);
FileOutputStream fos = new FileOutputStream(file);
try {
//log.info("----------1------------");
//log.info("--------"+new String(responseData1)+"--------");
//將獲取的接口響應(yīng)結(jié)果進(jìn)行base64解密
byte[] decoder = Base64.getMimeDecoder().decode(responseData1);
//log.info("----------2------------");
//將解密結(jié)果寫入pdf文件
fos.write(decoder);
//log.info("-------PDF File Saved---------");
} catch (Exception e) {
log.error("------error------------",e);
} finally {
if (fos != null) {
fos.close();
fos = null;
}
}
到了這里,關(guān)于jmeter下載base64加密版pdf文件的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!