關於HttpClient模擬瀏覽器請求的參數亂碼問題解決方式
轉載請註明出處:http://blog.csdn.net/xiaojimanman/article/details/44407297
http://www.llwjy.com/blogdetail/9383e88e4bc7378b8318e15b0ac33559.html
個人博客站已經上線了,網址:www.llwjy.com,歡迎大家吐槽~
--------------------------------------------------------------------------------------------------------------------------
在之前的博客中介紹了一些關於怎樣利用HttpClient去模擬瀏覽器請求,從而獲取網頁源碼,得到自己想要的內容。近期自己在做一些項目測試的時候,發下例如以下問題:
問題描寫敘述
1.使用HttpClient模擬post/get請求時,當參數中有中文,在server端解析出的參數值中的中文都是“?”。英文數字等能夠正常解析。
2.當模擬的url參數中有中文時,解析出的參數值中的中文也是“?”,例:http://hostname/test.do?name=您好
問題原因
在查閱眾多相關資料。最終找到當中的原因,眼下市面上多數的瀏覽器中url中的中文採用的都是utf-8的編碼方式。而HttpClient默認的編碼方式是gbk,因此在模擬瀏覽器請求的過程中,就會由於編碼方式不正確造成亂碼的問題。
解決方式
對於該問題,從下面兩個方面去解決:
第一步:指定HttpClient請求的編碼方式,指定編碼方式能夠有下面幾種方法:
method.getParams().setContentCharset("utf-8"); method.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,"utf-8"); method.addRequestHeader("Content-Type", "text/html; charset=UTF-8"); httpClient.getParams().setContentCharset("utf-8");
第二步:對URL中的中文進行轉碼處理,能夠通過以下的方法對URL做一次預處理,這樣再去模擬瀏覽器的行為時,就不會出現亂碼了。
public static String encodeUrlCh (String url) throws UnsupportedEncodingException { String ChRegex = "([\u4e00-\u9fa5]+)"; while (true) { String s = getFirstString(url, ChRegex, 1); if ("".equals(s)){ return url; } url = url.replaceAll(s, URLEncoder.encode(s, "utf-8")); } }通過上面兩步,全然能夠完美的解決模擬瀏覽器行為中出現的亂碼問題。
關於HttpClient模擬瀏覽器請求的參數亂碼問題解決方式