package com.henry.util; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.params.HttpMethodParams; import org.apache.log4j.Logger; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Map; /** * HttpClientUtil. * * @Author henry . */ public class HttpClientUtil { /** * 记录日志对象 */ private static final Logger LOGGER = Logger.getLogger(HttpClientUtil.class); public static final String CHARSET = "UTF-8"; /** * @method_name: HttpClient Post请求 * @author: henry * @date: 2018/4/9 15:44 * @param url * @param _params **/ public static String sendPost(String url, Map<String, Object> _params){ return sendPost(url,_params,CHARSET); } /** * @method_name: HttpClient Post请求 * @author: henry * @date: 2018/4/9 15:44 * @param url * @param _params * @param charset * @return **/ public static String sendPost(String url, Map<String, Object> _params, String charset) { StringBuffer response = new StringBuffer(); HttpClient client = new HttpClient(); PostMethod method = new PostMethod(url); // 设置请求参数 中文字符集 method.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,charset); // 设置Http Post数据 if (_params != null) { for (Map.Entry<String, Object> entry : _params.entrySet()) { method.setParameter(entry.getKey(), String.valueOf(entry.getValue())); } } try { client.executeMethod(method); if (method.getStatusCode() == HttpStatus.SC_OK) { // 读取为 InputStream BufferedReader reader = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream(), charset)); String line; while ((line = reader.readLine()) != null) { response.append(line); } reader.close(); } } catch (IOException e) { LOGGER.error("执行HTTP Post请求" + url + "时,发生异常!" + e); return null; } finally { method.releaseConnection(); } return response.toString(); } }
项目中发现使用HTTPClient的PostMethod方法有乱码,尝试使用
1、post参数设置
method.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,"utf-8");
2、client设置
client.getParams().setContentCharset("UTF-8");
client.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");
3、设置postmethod请求头
method.addRequestHeader("Content-type","application/x-www-form-urlencoded; charset=UTF-8");