关于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 参数自定。

转载于:https://www.cnblogs.com/hexlong/p/7976440.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值