HttpClient使用指南——POST请求

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HttpClient使用指南——POST请求相关的知识,希望对你有一定的参考价值。

参考技术A

1.创建一个请求客户端: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请求的主要内容,如果未能解决你的问题,请参考以下文章

使用httpclient发送post请求与get请求

Java使用HttpClient实现Post请求

使用 Microsoft.HttpClient 和 HttpContentExtensions 的通用 POST 请求

Java使用HttpClient实现Post请求

HttpClient的Post请求数据

使用 HttpClient 向本地 json 文件发送 POST 请求