解決jmeter 請求引數中文亂碼
今天在用jmeter 寫指令碼時發現檢視結果樹request post請求中文引數值是亂碼,故記錄下解決過程。
解決過程如下:
1、修改本地配置檔案
因為此處的資料,還沒有傳送出去,所以,肯定是這個變數的編碼和jmeter內部的一些編碼不一致導致。然後,嘗試修改jmeter.properties的配置項:
sampleresult.default.encoding=utf-8
重啟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;
}
}
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
}
會發現造成中文亂碼的原因是無法從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";
}
之後將新編譯的PostWriter.class替換E:\jmeter\apache-jmeter-2.11\lib\ext下的ApacheJMeter_http.jar檔案中的原class檔案.
這樣不寫Content encoding為utf-8 ,預設也按照UTF-8處理了。
或者採用簡單的方法,就是設定Content encoding項完成中文編碼,如下圖所示:
相關推薦
解決jmeter 請求引數中文亂碼
今天在用jmeter 寫指令碼時發現檢視結果樹request post請求中文引數值是亂碼,故記錄下解決過程。 解決過程如下: 1、修改本地配置檔案 因為此處的資料,還沒有傳送出去,所以,肯定是這個變數的編碼和jmeter內部的一些編碼不一致導致。然
get請求和post請求引數中文亂碼的解決
首先出現中文亂碼的原因是tomcat預設的編碼方式是"ISO-8859-1",這種編碼方式以單個位元組作為一個字元,而漢字是以兩個位元組表示一個字元的。 post請求引數中文亂碼的解決辦法 對於post請求,請求中問亂碼的兩種解決辦法。 (1): request.set
java web專案介面請求get,post請求引數中文亂碼解決
java web專案介面請求get,post請求引數中文亂碼解決 在開發過程中,有時候會碰到get,post請求引數中文亂碼。 原因: Http請求傳輸時將url以ISO-8859-1編碼,伺服器收到位元組流後預設會以ISO-8859-1編碼來解碼成字元
解決HttpClient工具中application/x-www-form-urlencoded表單提交時,請求引數中文亂碼問題
一、引數亂碼現象 當我去請求第三方介面時,介面接收格式為Form表單的時候,使用HttpClient工具類。這時,對於封裝進HttpPost物件裡的請求引數,如果有中文引數,會出現亂碼的現象。 二、程式碼現象復現 controller層 @RestContr
postman測試請求引數中文亂碼問題
用IDEA除錯程式碼時,用postman測試請求url,發現post或者get請求中引數是中文的話,後臺獲取的引數是亂碼, 一般兩個方面 傳送請求的一方:postman的問題 接受請求的一方:tomcat的問題 postman的解決方案,可以先設定全域性變數,將漢字寫到變數,並在引數中新增全域性變數引
解決get請求url中文亂碼
來自頁面的一個get請求: window.location.href = getContextPath()+"/manage/user/detail?name="+encodeURI(encodeURI("小明")); 伺服器端: String name = reque
解決get請求獲取中文亂碼的問題
關鍵點<%String name = new String((request.getParameter("name")).getBytes("ISO-8859-1"),"UTF-8"); %> <!DOCTYPE html> <html> <
SpringMVC學習系列-後記 解決GET請求時中文亂碼的問題
之前專案中的web.xml中的編碼設定: <filter> <filter-name>CharacterEncoding</filter-name> <filter-class>org.springframework.w
SpringMVC之GET請求引數中文亂碼
只怪自己專案做太少,遇到這些問題糾結太久,浪費時間太多. 在此記錄, WEB.XML檔案中的編碼過濾器設定是針對POST請求的,tomacat對GET和POST請求處理方式是不同的,要處理針對GET請求的編碼問題,則需要改tomcat,conf目錄下的server.x
IE相容 請求引數中文亂碼或請求無效 轉義與轉碼
要解決傳送請求包含中文引數,且還要相容IE瀏覽器,需要針對不同場景採用對應的方法來處理 概括為以下2種場景: 應用場景一:a標籤href請求 <% String str1 = "引數1"; //中文 String str2 = "引數2"; //中文 %>
web專案使用Tomcat作為伺服器,GET請求引數中文亂碼
問題: web專案使用Tomcat作為伺服器時,會遇到GET請求亂碼的問題。 原因: GET請求是將引數拼接到url上向伺服器發起請求的。在Tomcat接收到請求時,會先將url解碼。而預設
SpringMVC 解決GET請求時中文亂碼的問題
專案中的web.xml中的編碼設定: <filter> <filter-name>CharacterEncoding</filter-name> <filter-class>org.spr
java後臺解決get請求url中文引數亂碼
解決的程式碼如下 String keyword = request.getParameter("keyword"); keyword = new String(keyword.getBytes("iso-8859-1"), "utf-8"); get請求提交的引數是在位址列
get請求,中文亂碼解決 之 百度如何正確獲取中文請求引數(我猜測)
url查詢串不直接支援中文等非ASCII碼錶符號的傳輸,需要經過瀏覽器採取一種編碼方案將中文字元編碼為可用於url傳輸的符號(也就是ASCII碼的符號)。除這種類似中文查詢串的情況外,url中有特殊用途的符號,例如%,@, :, &,#,?等也不能直接傳輸,同樣需
2017.6.17 jsp中 get請求的中文亂碼問題的解決方法
utf meta class enc 請求 服務 charset url編碼 uri 一般Tocant 的url編碼是iso-8859-1(查看tocat/conf/server.xml 中的Connector 節點沒有寫URIEncoding="xxxxxx") 如下:
LoadRunner接口HTTP請求中中文亂碼解決方案
空格 con value 發送 nbsp toe string ner 字符串 今天項目經理要求壓一下實時代扣接口性能。那就開始寫腳本,腳本寫好調試發現接口請求參數姓名輸入中文亂碼。接著就網上找資料解決該問題。 1:想法:將中文轉成UTF-8,lr_convert_stri
get或post請求的中文亂碼問題解決
增加一個過濾器對傳過來的請求進行加強 package Test; import java.io.IOException; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import ja
解決@Value("${name}")獲取application.properties中定義的引數中文亂碼的問題
application.properties中引數如圖: pom.xml中設定如圖 但程式碼 import org.springframework.web.bind.annotation.RestController; @RequestMappin
解決spring3.0.5使用RestTemplate傳送post請求響應中文亂碼問題
說明: 1:使用spring3.0.5 post響應編碼型別,更加請求url響應內容的編碼決定,請求的url沒有設定響應編碼,預設為ISO-8859-1 2: 使用如下程式碼解析請求: package com.spring.rest; import ja
GET請求中中文亂碼的解決
《深入分析javaweb技術內幕》第三章 瀏覽器會自動對url進行編碼,不同瀏覽器用的編碼集不同,可進行設定。 tomcat預設是用iso-8859-1對uri和get引數進行解碼,所以如果這個過來的get引數是用的utf-8編碼的,到了伺服器端tomcat用iso8859-1解