解决jmeter 请求参数中文乱码
今天在用jmeter 写脚本时发现查看结果树request post请求中文参数值是乱码,故记录下解决过程。
解决过程如下:
1、修改本地配置文件
因为此处的数据,还没有发送出去,所以,肯定是这个变量的编码和jmeter内部的一些编码不一致导致。然后,尝试修改jmeter.properties的配置项:
sampleresult.default.encoding=utf-8
- 1
重启jmeter后,依然还是乱码。
2、修改消息头和请求体编码
同时把消息头和请求体的编码修改为utf-8,结果依然不生效。
3、查看jmeter源码
因为是request请求体的内容,所有先在下面的包中进行查看:
public static String decodeQuery(String query) {
if (query != null && query.length() > 0) {
try {
query = URLDecoder.decode(query, "ISO-8859-1"); // 此处的字符编码为ISO-8859-1 ,将其改为utf-8
return query;
} catch (IllegalArgumentException arg1) {
log.warn(
"Error decoding query, maybe your request parameters should be encoded:"
+ query, arg1);
return null;
} catch (UnsupportedEncodingException arg2) {
log.warn(
"Error decoding query, maybe your request parameters should be encoded:"
+ query, arg2);
return null;
}
} else {
return null;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
eclipse 安装反编译插件(Help——Eclipse Marketplace 输入 Decompiler 搜索并安装此插件–安装重启之后结果)
4 反编译RequestViewHTTP.class,将ISO-8859-1 ,将其改为UTF-8,然后编译,使用最新class打包替换原来jar。
重启jmeter,再次请求时,请求参数如下:
再说下HTTP协议录制中文问题
在进行HTTP协议测试过程中,我们往往会借助JMeter为我们提供的HTTP代理服务器进行测试脚本的录制,一个典型的录制计划如如下图:
由于在浏览器中的showName项输入了中文,因此,在录制所生成的HTTPSampler的POST表单中出现了中文乱码情况。
我们可以在org.apache.jmeter.protocol.http.proxy包中的org.apache.jmeter.protocol.http.proxy.DefaultSamplerCreator.class源文件中发现如下代码:
if (!StringUtils.isEmpty(contentEncoding)) {
postData = new String(request.getRawPostData(), contentEncoding);
} else {
postData = new String(request.getRawPostData(), "ISO-8859-1");
//将ISO-8859-1编码改为UTF-8
}
- 1
- 2
- 3
- 4
- 5
- 6
会发现造成中文乱码的原因是无法从Content encoding中读取信息,而使用了默认的ISO-8859-1编码,因此,我们只需要指明我们中文编码即可解决上述问题,最简单的方案是注释掉上面那段代码,设置一个全局的默认中文编码,如下方法:
postData = new String(request.getRawPostData(), “utf-8”);
之后将新编译的DefaultSamplerCreator.class替换E:\jmeter\apache-jmeter-2.11\lib\ext下的ApacheJMeter_http.jar文件中的原class文件.
再次录制,可以看到能够正常显示中文了.
再说下Jmeter HTTP请求中的Content encoding选项
我们知道在现有的JMeter版本中HTTPSampler主要可以通过选择Java、HttpClient3.1和HttpClient4来设置最终模拟HTTP协议与Web服务器交互的真正实现方法。我这里以Java实现方法作为参考,从JMeter源码包org.apache.jmeter.protocol.http.sampler中查看源代文件PostWriter.java,发现这样一行:
可以看出如果没有设置Content encoding项,JMeter同样是默认为ISO-8859-1编码,一种一劳永逸的方法(这里只是一个针对HTTPSampler的例子,但可以根据此思路扩展到所有需要中文字符编码的Sampler中),我们只需要将默认编码根据中文编码需求更改为utf-8、gb18030等,就可以实现POST正确的中文到Web服务器了。参考如下修改:
String contentEncoding = sampler.getContentEncoding();
if (contentEncoding == null || contentEncoding.length() == 0) {
contentEncoding = "UTF-8";
}
- 1
- 2
- 3
- 4
- 5
之后将新编译的PostWriter.class替换E:\jmeter\apache-jmeter-2.11\lib\ext下的ApacheJMeter_http.jar文件中的原class文件.
这样不写Content encoding为utf-8 ,默认也按照UTF-8处理了。
或者采用简单的方法,就是设置Content encoding项完成中文编码,如下图所示:
解决jmeter 请求参数中文乱码的更多相关文章
- JSP中解决获取请求参数中文乱码问题
分两种情况: 1.获取访问请求参数时乱码 解决方法:构造一个新的String String user = new String(request.getParameter("user" ...
- jmeter请求参数中文乱码及无法读取CSV文件解决办法
解决办法:参考http://blog.csdn.net/u012167045/article/details/70868306 版本:2.6 我是修改请求http请中的编码为Content encod ...
- jmeter请求参数中文乱码,解决方法
- 使用过滤器(Filter)解决请求参数中文乱码问题(复杂方式)
前述: 在写这篇笔记之前,对笔记中的设计模式进行介绍: 本篇笔记中将要使用到的设计模式是:装饰(包装)设计模式 (1)装饰(包装)设计模式口诀: ...
- 详解get请求和post请求参数中文乱码的解决办法
首先出现中文乱码的原因是tomcat默认的编码方式是"ISO-8859-1",这种编码方式以单个字节作为一个字符,而汉字是以两个字节表示一个字符的. 一,get请求参数中文乱码的解 ...
- get请求和post请求参数中文乱码的解决办法
get请求参数中文乱码的解决办法 在tomcat的server.xml里的Connector加个URIEncoding="UTF-8",把 <Connector connec ...
- java web项目get,post请求参数中文乱码解决
[转载]原文地址:https://www.cnblogs.com/tom-plus/p/6392279.html 在开发过程中,有时候会碰到get,post请求参数中文乱码. 原因: Http请求传输 ...
- SpringMVC学习系列-后记 解决GET请求时中文乱码的问题
SpringMVC学习系列-后记 解决GET请求时中文乱码的问题 之前项目中的web.xml中的编码设置: <filter> <filter-name>CharacterEnc ...
- 使用SpringMVC参数传递时,解决get请求时中文乱码的问题
问题描述: 使用SpringMVC参数传递时, 遇到get请求中文信息时,页面应答会显示中文乱码. 解决办法: 一, 我们需要把request.getParameter(“参数名”)获取到的字符串先 ...
随机推荐
- 简单通讯聊天 群聊功能 Windows下的客户端 Linux下的epoll服务器
1 服务器代码 Linux eclipse C++ //======================================================================= ...
- 【JAVA系列】Google爬虫如何抓取JavaScript的?
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[JAVA系列]Google爬虫如何抓取Java ...
- linux 使用timedatectl 修改时区和时间
使用timedatectl可以进行如下常见操作 1.查看当前时间/日期/时区:timedatectl或者timedatectl status 2.查看所有可用时区:timedatectl list-t ...
- 【神经网络与深度学习】基于Windows+Caffe的Minst和CIFAR—10训练过程说明
Minst训练 我的路径:G:\Caffe\Caffe For Windows\examples\mnist 对于新手来说,初步完成环境的配置后,一脸茫然.不知如何跑Demo,有么有!那么接下来的教 ...
- [转帖]oracle备份恢复之recover database的四条语句区别
oracle备份恢复之recover database的四条语句区别 https://www.cnblogs.com/andy6/p/5925433.html 需要学习一下. 1 recover d ...
- jsp运行环境的安装和配置
1.JDK的安装和配置 1)下载jdk,我下载的是1-jdk-6u26-windows-i586.exe,放在D:\StudySystem\JavaWeb\jdk目录下. 2)安装jdk,直接你下载的 ...
- Luogu P1948 [USACO08JAN]Telephone Lines
题目 两眼题 二分一个\(lim\),然后跑最短路(边权\(\le lim\)的边长度为\(0\),\(>lim\)的长度为\(1\)),然后判断\(dis_{1,n}\le k\). #inc ...
- Python Set intersection() 方法
描述 intersection() 方法用于返回两个或更多集合中都包含的元素,即交集. 语法 intersection() 方法语法: set.intersection(set1, set2 ... ...
- .net core 2.2.0 SOAP踩坑
首先确认下面几个程序集是最新版本: <PackageReference Include="System.ServiceModel.Http" Version="4. ...
- node.js--使用Express中app.use()分模块开发
app.use(path,callback)中的callback既可以是router对象又可以是函数:将一个URL路径与一个函数绑定,第一个参数为访问的路径,如果第一参数为空,则表示任何路径都触发这个 ...