import java.io.IOException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.ResponseHandler; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; /** * 发送HTTP请求工具类 * @author Rong.zhu * */ public class HttpUtils { private final static int CONNECT_TIMEOUT_VALUE = 20000;//请求(连接)超时:20秒 private final static int SOCKET_TIMEOUT_VALUE = 60000;//响应超时:60秒,一定要设置,否则可能导致当前线程一直处于等待状态 private static RequestConfig requestConfig; private static ResponseHandler<String> responseHandler; static{ requestConfig = RequestConfig.custom() .setConnectTimeout(CONNECT_TIMEOUT_VALUE)//请求超时:connect timed out. connect refused .setSocketTimeout(SOCKET_TIMEOUT_VALUE) //响应超时:response timed out .build(); responseHandler = new ResponseHandler<String>() { public String handleResponse(final HttpResponse response) throws ClientProtocolException, IOException { int status = response.getStatusLine().getStatusCode(); if (status >= 200 && status < 300) { HttpEntity entity = response.getEntity(); return entity != null ? EntityUtils.toString(entity, "UTF-8") : null; } else { throw new ClientProtocolException("request failed,unexpected response status: " + status); } } }; } public static String postJSON(String url, Object sendData )throws Exception { HttpPost httppost = new HttpPost(url); httppost.setConfig(requestConfig); StringEntity entity = new StringEntity(JSONUtils.convertObject2Json(sendData),ContentType.create("application/json","UTF-8")); httppost.setEntity(entity); CloseableHttpClient httpClient = null; String responseBody = null; try{ httpClient = HttpClients.createDefault(); responseBody = httpClient.execute(httppost, responseHandler); }finally{ if(httpClient != null) { httpClient.close(); } } return responseBody; } /** * 发送POST请求,该方法将会对参数进行UTF-8编码 * @param url * @param params * @return * @throws Exception */ public static String post(String url, Map<String, String> params) throws Exception { //封装请求参数 List<NameValuePair> nvps = new ArrayList<NameValuePair>(); if(params != null) { Set<Entry<String, String>> entrySet = params.entrySet(); for(Entry<String, String> entry : entrySet) { nvps.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); } } //对参数进行转码(特殊字符) UrlEncodedFormEntity entity = new UrlEncodedFormEntity(nvps, "UTF-8"); HttpPost httppost = new HttpPost(url); httppost.setConfig(requestConfig); httppost.setEntity(entity); CloseableHttpClient httpClient = null; String responseBody = null; try{ httpClient = HttpClients.createDefault(); responseBody = httpClient.execute(httppost, responseHandler); }finally{ if(httpClient != null) { httpClient.close(); } } return responseBody; } /** * 发送GET请求,该方法将会对参数进行UTF-8编码 * @param url * @return * @throws Exception */ public static String get(String url) throws Exception { StringBuffer encodedUrl = new StringBuffer(); if(url.contains("?")) { encodedUrl.append(url.substring(0,url.lastIndexOf("?"))).append("?"); String paramstr = url.substring(url.lastIndexOf("?")+1); String[] params = paramstr.split("&"); for(String param: params) { String pkey = param.substring(0,param.lastIndexOf("=")); String pvalue = param.substring(param.lastIndexOf("=")+1); encodedUrl.append(pkey).append("=").append(URLEncoder.encode(pvalue,"UTF-8")).append("&");//UTF-8转码 } String temp = encodedUrl.toString(); temp.substring(0, temp.lastIndexOf("&")); encodedUrl = new StringBuffer(temp); }else { encodedUrl.append(url); } HttpGet httpGet = new HttpGet(encodedUrl.toString()); CloseableHttpClient httpClient = null; String responseBody = null; try{ httpClient = HttpClients.createDefault(); responseBody = httpClient.execute(httpGet, responseHandler); }finally{ if(httpClient != null) { httpClient.close(); } } return responseBody; } }