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");