解决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(“参数名”)获取到的字符串先 ...
随机推荐
- 【SSM】---增删改查
20:43:06 package com.chinasofti.dao; import java.util.List; import com.chinasofti.entity.User; publi ...
- beanFactory 设计模式 Bean 生命周期
写在前面的话 适用读者:有一定经验的,本文不适合初学者,因为可能不能理解我在说什么 文章思路:不会一开始就像别的博客文章那样,Bean 的生命周期,源码解读(给你贴一大堆的源码).个人觉得应该由问题驱 ...
- 浏览器访问ipv6站点(未绑定主机的ipv6站点)
我们在浏览器直接输入ipv6地址敲回车,一般情况下浏览器会跳转到搜索引擎进行搜索. 我们需要在浏览器器中输入: http://[::1] 或者 [::1]
- springboot mybatis下临时表的创建和删除,可用于查重去重
/** * 创建临时表 */ @Update({"drop temporary table if exists ${tableName};", "create tempo ...
- cocos2dx[3.2](4) 入口类AppDelegate
这是游戏程序的入口,主要用于游戏程序的逻辑初始化,并创建运行程序的入口界面(即第一个游戏界面场景). 里面有三个方法: // applicationDidFinishLaunching(); //逻辑 ...
- vue2.X + HTML5 plus 拍照和调用设备相册 另附 图片转base64和压缩图片方法
HTML5 部分 <button @click="tesCamera()" type="button" :disabled="isshStatu ...
- zabbix监控java
参考: 官网: https://www.zabbix.com/documentation/4.0/manual/config/items/itemtypes/jmx_monitoring
- 解决移动端浏览器 HTML 音频不能自动播放的三种方法
https://blog.csdn.net/PY0312/article/details/90349386 由于Android,IOS移动端的浏览器以及微信自带的浏览器为了用户更好的体验,规定不自动播 ...
- 03: saltstack和ansible的区别和原理
1.1 SaltStack.Ansible.Puppet比较 1.SaltStack 1. saltStack由Python编写,为server-client模式的系统,自己本身支持多master. ...
- PythonDay11
第十一章函数使用_迭代器 今日内容 函数名的第一类对象及使用 f-strings 迭代器 函数名的第一类对象及使用 函数名可以当做值,赋值给变量 函数名可以当做容器内的元素 函数名可以当做函数的参数 ...