1. 程式人生 > >解決jmeter 請求引數中文亂碼

解決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解