失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Jmeter解决上传附件中文名乱码问题

Jmeter解决上传附件中文名乱码问题

时间:2020-07-02 16:32:59

相关推荐

Jmeter解决上传附件中文名乱码问题

1.问题描述

在编写jmeter接口脚本时,上传的附件名称,如果有中文名,附件名称会显示乱码。因为是国外开源代码嘛,对中文有时确实不太友好。我尝试了很多方法都失败了,比如说:

买了c**n会员,下载尝试了别人修改后的多个ApacheJMeter_http.jar,替换到apache-jmeter-5.4.3\lib\ext路径下;

在http请求中把Content encoding设置成UTF-8;

勾选“对POST使用multipart / form-data” 和 “与浏览器兼容的头”选项;apache-jmeter-5.4.3\bin下的jmeter.properties,设置sampleresult.default.encoding=UTF-8;

网上改源码地方全部都是HTTPHC4Impl类中添加对字符编码设置成UTF-8,multipartEntityBuilder.setCharset(charset);

以上方法通通都失败了,上传的附件名依然还是有乱码。改HTTPHC4Impl类源码打了log,发现上传附件的接口根本没有执行HTTPHC4Impl类,没有日志输出。网上的各种方法都尝试过了全失败了,上传附件中文名还是乱码。啊~ 有点累而不爱了~

所以我准备下载jmeter全部源码,对jmeter源码进行debug,找到问题所在,进行二次开发。妥妥的~

2.下载jmeter 源码

我用的jmeter版本是5.4.3,所以在官网/download_jmeter.cgi 下载5.4.3版本的源码。Windows环境下,下载.zip的。下载到本地后进行解压。

3.将源码导入idea

解压源码后,在idea中File→Open,打开已经解压的源码项目。

因为5.4.3版本的源码构建环境集成了Gradle,所以open源码项目后,需要等一会,Gradle会自动去build,我大概等了30分钟左右。build完成。

4.运行jmeter源码

网上说,运行developement下的 runGui,我真的找了好久runGui? 第一次用Gradle构建。近在眼前,idea的右边,Jmeter→developement→runGui,双击运行runGui弹出jmeter界面后,运行成功。

5.Debug源码,修改乱码问题

起初按照网上说的,上传附件名中文乱码是修改HTTPHC4Impl.java,在下图中位置加上设置编码为utf-8的代码。但是debug发现,运行上传文件的接口,根本没有走HTTPHC4Impl.java的代码,所以完全没有用。

在runGui后的jmeter界面中,编写上传的接口脚本,通过jmeter日志,定位到相关代码,打断点,点击debug按钮去追踪。

点击运行按钮,执行上传附件接口,通过Debug去追踪。通过Debug发现,org.apache.jmeter.protocol.http.sampler下PostWriter.java类中setHeaders方法里,这一步取到的附件名称中文没有乱码。

但是以后的出现的附件中文名就是乱码了。

啊,离真相越来越近了,原来是在拼装http的header时候,对附件文件名进行了解码,解码呢,用的是ISO-8859-1编码,那文件名是中文的话,那肯定是乱码咯。

将解码用ISO改成UTF-8。

PostWriter.java有两句代码修改的地方:

将out.write(value.getBytes(ENCODING));这句代码改成:out.write(value.getBytes(StandardCharsets.UTF_8.name()));将byte[] header = headerValue.getBytes(ENCODING);这句代码改成:byte[] header = headerValue.getBytes(StandardCharsets.UTF_8.name());

如下图所示:

PS:注意在http请求体中,Content encoding需要设置成UTF-8

重新执行runGui,编译代码,运行上传附件接口看下效果。

附件中文名终于不是乱码了,ok,问题解决~ 接下来就是讲编译好的jar包,替换到jmeter的lib\ext路径下。

6.编译jar包,放到Jmeter路径下

运行developement下的 runGui后,会自动编译代码,打jar包放在lib下。我们改了org.apache.jmeter.protocol.http.sampler下PostWriter.java类代码,编译到ApacheJMeter_http.jar中。复制源码工程的apache-jmeter-5.4.3\lib\ext下的ApacheJMeter_http.jar。

把复制后的jar包ApacheJMeter_http.jar ,放在jmeter的安装路径apache-jmeter-5.4.3\lib\ext下。替换原有的ApacheJMeter_http.jar。重启jmeter后,看下效果。

PS:注意在http请求体中,Content encoding需要设置成UTF-8

替换了jar包后,附件中文名称乱码问题解决了~ oh~ 撒花,bye~

如果觉得《Jmeter解决上传附件中文名乱码问题》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。