转载请注明出处: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");

经过第一步的处理,对POST中的參数中有中文的问题已经能够攻克了。可是url中的中文还是没有办法解决,这就须要第二步了。

第二步:对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模拟浏览器请求的參数乱码问题解决方式的更多相关文章

  1. 一步步教你为网站开发Android客户端---HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新ListView

    本文面向Android初级开发者,有一定的Java和Android知识即可. 文章覆盖知识点:HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新List ...

  2. 第五十九节,模拟浏览器请求Python结合html基本格式

    模拟浏览器请求Python结合html基本格式 用Python模拟一个客户端,结合打开一个HTML页面 创建客户端 #!/usr/bin/env python # -*- coding:utf8 -* ...

  3. 第四十节,requests模拟浏览器请求模块初识

    requests模拟浏览器请求模块初识  requests模拟浏览器请求模块属于第三方模块 源码下载地址http://docs.python-requests.org/zh_CN/latest/use ...

  4. python入门常用方法(转json,模拟浏览器请求头,写入文件)

    转json import jsonjson = json.loads(html) 模拟浏览器请求头 import urllib.request req = urllib.request.Request ...

  5. Web容器自己主动对HTTP请求中參数进行URLDecode处理

    这篇文章转载自 : Web容器自己主动对HTTP请求中參数进行URLDecode处理 如题.在Java中或许非常多人都没有注意到当我们发送一个http请求时,假设附带的參数被URLEncode之后,到 ...

  6. 我的Spring之旅(二):为请求加入參数

    1.前言 在上一篇我的Spring之旅(一)中,我们仅仅是利用不带參数的请求返回一个网页或一段json,在实际的B/S.C/S网络交互中,请求中须要自己定义的參数.本篇将简单地为之前的请求加入參数. ...

  7. requests模拟浏览器请求模块初识

    requests模拟浏览器请求模块初识  一.下载 requests模拟浏览器请求模块属于第三方模块 源码下载地址http://docs.python-requests.org/zh_CN/lates ...

  8. httpClient模拟浏览器发请求

    一.介绍 httpClient是Apache公司的一个子项目, 用来提高高效的.最新的.功能丰富的支持http协议的客户端编程工具包.完成可以模拟浏览器发起请求行为. 二.简单使用例子 : 模拟浏览器 ...

  9. JAVA--利用HttpClient模拟浏览器登陆请求获取响应的Cookie

    在通过java采集网页数据时,我们常常会遇到这样的问题: 站点需要登陆才能访问 而这种网站,一般都会对请求进行账号密码的验证,验证的方式也有多种,需要具体分析. 今天分析其中的一种情况: 站点对登陆密 ...

随机推荐

  1. 比较好的Dapper封装的仓储实现类 来源:https://www.cnblogs.com/liuchang/articles/4220671.html

    using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; usin ...

  2. Collections库使用

    Date: 2019-05-27 Author: Sun Collections库 ​ Python拥有一些内置的数据类型,比如str, int, list, tuple, dict等, collec ...

  3. indexedDB介绍

    什么是 indexedDB IndexedDB 是一种使用浏览器存储大量数据的方法.它创造的数据可以被查询,并且可以离线使用. IndexedDB对于那些需要存储大量数据,或者是需要离线使用的程序是非 ...

  4. caioj 1155 同余方程组(模版)

    第一步,和同余方程一样,转化一下 两式相减得 这就转化为了求不定方程,用exgcd 求出x,要化成最小正整数解,避免溢出 然后可以求出P出来. 这个时候要把前两个式子转化成一个式子 设求出来的是P' ...

  5. readb(), readw(), readl(),writeb(), writew(), writel() 宏函数

    参见: http://blog.csdn.net/hustyangju/article/details/20448339

  6. CentOS6.5安装redis(3.0.3)

      如果没有安装gcc需要安装gcc 才能编译成功 yum install gcc 离线安装gcc的方法 # rpm -ivh mpfr-2.4.1-6.el6.x86_64.rpm # rpm -i ...

  7. hdu 2191 悼念512汶川大地震遇难同胞——珍惜如今,感恩生活

    #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int ...

  8. UVA10491 - Cows and Cars(概率)

    UVA10491 - Cows and Cars(概率) 题目链接 题目大意:给你n个门后面藏着牛.m个门后面藏着车,然后再给你k个提示.在你作出选择后告诉你有多少个门后面是有牛的,如今问你作出决定后 ...

  9. Canvas中的非零围绕规则原理

    非零围绕规则:对于路径中指定范围区域,从该区域内部画一条足够长的线段.使此线段的全然落在路径范围之外. 非零围绕规则计数器:然后,将计数器初始化为0,每当这个线段与路径上的直线或曲线相交时,就改变计数 ...

  10. vijos - P1732能量採集 (状态转移)

    P1732能量採集 Accepted 标签:NOI2010[显示标签] 背景 描写叙述 栋栋有一块长方形的地.他在地上种了一种能量植物,这样的植物能够採集太阳光的能量. 在这些植物採集能量后,栋栋再使 ...