HttpClient使用指南——POST请求
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HttpClient使用指南——POST请求相关的知识,希望对你有一定的参考价值。
参考技术A1.创建一个请求客户端:HttpClients.createDefault(),用来实际发起调用post请求,可以类比成浏览器。
2.组装表单请求数据:因需要传递文件,所以通过 MultipartEntityBuilder 构造器组装表单实体请求数据。
2.1 设置mode为 HttpMultipartMode.RFC6532 (必须);
2.2 设置字符集为UTF-8(必须);
2.3 通过 addBinaryBody 追加文件;
2.4 通过 addTextBody 追加文本参数,若文本为中文则必须指定字符集为GBK或者UTF-8。
3.创建一个post请求:通过请求构造器 RequestBuilder 的post方法构造一个post请求,通过 setEntity 方法向post请求里放置请求参数,通过addHeader方法向post请求里追加请求头信息,请求头信息比如双方约定的token,通过build方法返回请求对象。
4.发起post请求并获得响应:通过请求客户端的execute方法执行请求并获得返回值请求响应。
5.获取响应结果:获取响应对象的实体HttpEntity,通过 EntityUtils 的 toString 方法将实体转成字符串,这里一般还要指定字符集,尤其是当实体里没有指定字符集时。
注意 : MultipartEntityBuilder 必须指定 mode 为 HttpMultipartMode.RFC6532 ,且必须设置字符集为 UTF-8 , 否则若传递的文件名包含中文,则 文件名乱码 ;对于普通的文本参数,中文指定UTF-8或者GBK接收方均未发现乱码情况; 接收方 需要将请求转为 MultipartHttpServetRequest 方可获取到文件,示例代码如下:
使用httpclient post请求中文乱码解决办法
使用httpclient post请求中文乱码解决办法
在使用httpclient发送post请求的时候,接收端中文乱码问题解决。
正文:
我们都知道,一般情况下使用post请求是不会出现中文乱码的。可是在使用httpclient发送post请求报文含中文的时候在发送端数据正常但是到了服务器端就中文乱码了。
解决办法:
发送端进行设置编码如下:
主要代码:
if (null != jsonParam) {
//解决中文问题。
method.addHeader("Content-type","application/json; charset=utf-8");
method.setHeader("Accept", "application/json");
method.setEntity(new StringEntity(jsonParam.toString(), Charset.forName("UTF-8")));
}
HttpResponse result = httpClient.execute(method);
在接收(服务器)端:
主要代码:
@RequestMapping(value = "getJson")
@ResponseBody
public Map<String,Object> getJson(@RequestBody String requestBody, HttpServletRequest request){
requestBody = new String(requestBody.getBytes(), Charset.forName("utf-8"));
JSONObject jsonObject = JSONObject.parseObject(requestBody);
System.out.println(jsonObject);
ResultJsonInfo info = JSONObject.parseObject(jsonObject.toJSONString(), ResultJsonInfo.class);
System.out.println(info);
//TODO 处理自己业务
JSONObject result= new JSONObject();
result.put("success", "true");
Map<String, Object> resultMap = new HashMap<String, Object>();
resultMap.put("isok", true);
return resultMap;
}
这样处理之后。再次请求。乱码问题解决。
以上是关于HttpClient使用指南——POST请求的主要内容,如果未能解决你的问题,请参考以下文章