关于HttpClient的学习心得,请求参数中文乱码问题

最近调用了一个第三方接口,接口文档限定是 HTTPS post 请求 参数是 json格式。然后随便在网上找了一份HttpClient的工具代码,然后直接调用post的请求,参数也觉得没有问题,返回值也正常,但是后来发现参数中的中文全部变成了问号传递过去了,后来发现是参数传递时编码没有指定,现记录下来以供以后学习查看,有遇到和我一样问题的初学者可以减少差询问题的时间。

代码如下:

  HttpClient httpClient = null;    HttpPost httpPost = null;    String result = null;    HttpResponse response = null;    try {     
     httpClient=new DefaultHttpClient();//1创建httpclient对象     httpPost = new HttpPost(url);//2因为是post请求所以创建httppost对象
        httpPost.addHeader("Content-Type", "application/json");//3设置请求头参数和参数类型        StringEntity se = new StringEntity(jsonstr,"UTF-8");//4设置参数内容,并制定编码格式(之前问题就在这里缺少了 “UTF-8”这个参数,就出现问号了)        se.setContentType("text/json");//设置格式类型        se.setContentEncoding(new BasicHeader("Content-Type", "application/json"));        httpPost.setEntity(se);//参数封装到post中        response = httpClient.execute(httpPost);//执行请求方法,返回response响应参数        if (response.getEntity()!=null){//判断响应是否为空            result = EntityUtils.toString(response.getEntity(), charset);//指定响应参数编码然后返回        }    } catch (IOException e) {        e.printStackTrace();    }    return result;}

后续和第三方的技术人员要了一个他们公司的demo,研究学习了一下,发现他们使用的是PoolingHttpClientConnectionManager用了连接池查了资料才知道,频繁的创建连接(三次握手)断开连接(四次挥手)会消耗很对资源,所以使用连接池技术方便下次调用。

public static void init() {//demo中的初始化方法,其中设置了相关的请求参数和连接数

connMgr = new PoolingHttpClientConnectionManager();

connMgr.setMaxTotal(500);//设置整个连接池最大连接数 根据自己的场景决定
connMgr.setDefaultMaxPerRoute(connMgr.getMaxTotal());

RequestConfig.Builder configBuilder = RequestConfig.custom();

configBuilder.setConnectTimeout(1000);//设置最大连接数

configBuilder.setSocketTimeout(1000);//设置服务端连接超时

configBuilder.setConnectionRequestTimeout(2000);//设置请求连接超时

configBuilder.setStaleConnectionCheckEnabled(true);
requestConfig = configBuilder.build();

}

//加载初始化配置信息,获取一个httpclient的连接对象

CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(createSSLConnSocketFactory()).setConnectionManager(connMgr).setDefaultRequestConfig(requestConfig)
.setRetryHandler(httpRequestRetryHandler).build();

 剩下的代码都一样了,get,post 参数自定。
时间: 2024-11-07 03:26:16

关于HttpClient的学习心得,请求参数中文乱码问题的相关文章

详解get请求和post请求参数中文乱码的解决办法

首先出现中文乱码的原因是tomcat默认的编码方式是"ISO-8859-1",这种编码方式以单个字节作为一个字符,而汉字是以两个字节表示一个字符的. 一,get请求参数中文乱码的解决办法 对于get请求解决中文乱码有两种途径一种是修改tomcat默认的编码方式为"UTF-8" 在tomcat的server.xml里把 <Connector connectionTimeout="50000" port="8080" pro

使用过滤器(Filter)解决请求参数中文乱码问题(复杂方式)

前述: 在写这篇笔记之前,对笔记中的设计模式进行介绍: 本篇笔记中将要使用到的设计模式是:装饰(包装)设计模式 (1)装饰(包装)设计模式口诀: ①定义一个类,实现被装饰对象的接口 ②定义一个成员变量,记住被装饰对象的引用 ③定义构造方法,传入被装饰对象的实例 ④改写要修改的方法 ⑤不需要改写的方法,调用被装饰对象的原来的方法 (2)什么时候使用装饰设计模式 当我们需要对一个类进行增强的时候,增强后的类不再当前类的范畴 例如:现在有一个     Animal类     Cat和Dog都属于动物类

get请求和post请求参数中文乱码的解决办法

get请求参数中文乱码的解决办法 在tomcat的server.xml里的Connector加个URIEncoding="UTF-8",把 <Connector connectionTimeout="50000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/> 改为 <Connector connectionTimeout=&qu

springmvc提供的解决post/get请求参数中文乱码问题

<!--springmvc提供的解决post/get请求参数中文乱码问题--><filter> <filter-name>encoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</p

黑马day04 表单请求参数&amp;中文乱码分析

实验: 1.获取post以及get请求方式的参数 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>param.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"

jsp或Action获取请求参数中文乱码

普通情况下,中文字符会被自动转换成iso-8859-1的编码格式通过网络传输,而这种格式是没办法直接表示出我们认识的中文字符的,所以还要手动将他转换回之前的字符集. 一般在servlet或者action之前加一个字符过滤器就可以解决这个问题了. 看一下jsp页面的编码,如果是utf-8就写成下面的这样获取参数就可以了,如果是其他编码就替换下面 "utf-8"成实际编码:String username = new String(request.getParameter("tPa

jmeter请求参数中文乱码及无法读取CSV文件解决办法

解决办法:参考http://blog.csdn.net/u012167045/article/details/70868306 版本:2.6 我是修改请求http请中的编码为Content encoding :utf-8 就正常了. 无法读取CSV文件: 可能是windows下路径有问题,在CSV Data Set Config 中filename修改为:E:\\edulogin.csv

spring mvc请求参数中文乱码解决方案

POST 请求 在web.xml中加上增加过滤器 1 <filter> 2 <filter-name>encodingFilter</filter-name> 3 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 4 <init-param> 5 <param-name>encoding</param

httpclient 4.3 psot方法上传文件与参数 中文乱码解决

废话不多说,直接上有码的! 1 package httpclient; 2 3 import java.io.File; 4 import java.nio.charset.Charset; 5 6 import org.apache.http.Consts; 7 import org.apache.http.Header; 8 import org.apache.http.HttpEntity; 9 import org.apache.http.client.methods.Closeable