package com.gk.firework.Domain.Utils; import org.apache.http.Header; import org.apache.http.HttpStatus; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; 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.util.EntityUtils; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.Map; public class HttpUtils { private static final Logger logger = LogManager.getLogger(HttpUtils.class); public static final String DEF_CHATSET = "UTF-8"; public static final int DEF_CONN_TIMEOUT = 30000; public static final int DEF_READ_TIMEOUT = 30000; public static String userAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29"; /** * * @param strUrl 请求地址 * @param params 请求参数 * @param method 请求方法 * @return 网络请求字符串 * @throws Exception */ public static String net(String strUrl, Map params, String method) throws Exception { HttpURLConnection conn = null; BufferedReader reader = null; String rs = null; try { StringBuffer sb = new StringBuffer(); if(method==null || method.equals("GET")){ strUrl = strUrl+"?"+urlencode(params); } URL url = new URL(strUrl); conn = (HttpURLConnection) url.openConnection(); if(method==null || method.equals("GET")){ conn.setRequestMethod("GET"); }else{ conn.setRequestMethod("POST"); conn.setDoOutput(true); } conn.setRequestProperty("User-agent", userAgent); conn.setUseCaches(false); conn.setConnectTimeout(DEF_CONN_TIMEOUT); conn.setReadTimeout(DEF_READ_TIMEOUT); conn.setInstanceFollowRedirects(false); conn.connect(); if (params!= null && method.equals("POST")) { try { DataOutputStream out = new DataOutputStream(conn.getOutputStream()); out.writeBytes(urlencode(params)); } catch (Exception e) { // TODO: handle exception } } InputStream is = conn.getInputStream(); reader = new BufferedReader(new InputStreamReader(is, DEF_CHATSET)); String strRead = null; while ((strRead = reader.readLine()) != null) { sb.append(strRead); } rs = sb.toString(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { reader.close(); } if (conn != null) { conn.disconnect(); } } return rs; } //将map型转为请求参数型 public static String urlencode(Mapdata) { StringBuilder sb = new StringBuilder(); for (Map.Entry i : data.entrySet()) { try { sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue()+"","UTF-8")).append("&"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } return sb.toString(); } //post json // public static String sendPost(String url, String data) { // String response = null; // try { // HttpClient httpclient = null; // HttpResponse httpresponse = null; // HttpPost httppost = null; // // try { // httpclient = HttpClients.createDefault(); // httppost = new HttpPost(url); // StringEntity stringentity = new StringEntity(data, // ContentType.create("application/json", "UTF-8")); // httppost.setEntity(stringentity); // httpresponse = httpclient.execute(httppost); // response = EntityUtils // .toString(httpresponse.getEntity()); // // 检验返回码 // int statusCode = httpresponse.getStatusLine().getStatusCode(); // if(statusCode != HttpStatus.SC_OK){ // logger.error("请求出错: "+statusCode); // if (statusCode == 307) { // Header header = httpresponse.getFirstHeader("location"); // 跳转的目标地址是在 HTTP-HEAD上 // String newuri = header.getValue(); // 这就是跳转后的地址,再向这个地址发出新申请 // logger.error(newuri); // // httppost = new HttpPost(newuri); // StringEntity newstringentity = new StringEntity(data, // ContentType.create("application/json", "UTF-8")); // httppost.setEntity(newstringentity); // httpresponse = httpclient.execute(httppost); // response = EntityUtils // .toString(httpresponse.getEntity()); // // logger.error("请求出错: "+httpresponse.getStatusLine().getStatusCode()); // } // // } // } catch (Exception e){ // e.printStackTrace(); // }finally { // if(httppost != null){ // try { // httppost.releaseConnection(); // Thread.sleep(500); // } catch (InterruptedException e) { // e.printStackTrace(); // } // } // } // } catch (Exception e) { // e.printStackTrace(); // } // return response; // } public static String sendPost(String url, String data) { String resData = null; try { RequestConfig config = RequestConfig.custom().setRedirectsEnabled(false).build();//不允许重定向 CloseableHttpClient client = HttpClients.custom().setDefaultRequestConfig(config).build(); // CloseableHttpClient client = HttpClients.createDefault(); HttpPost post = new HttpPost(url); post.setHeader("Content-Type", "application/json;charset=UTF-8"); StringEntity se = new StringEntity(data, "UTF-8"); se.setContentEncoding("UTF-8"); se.setContentType("application/json"); post.setEntity(se); CloseableHttpResponse response = client.execute(post); resData = EntityUtils.toString(response.getEntity()); // 检验返回码 int statusCode = response.getStatusLine().getStatusCode(); if(statusCode != HttpStatus.SC_OK){ logger.error("请求出错: "+statusCode); if (statusCode == 307) { Header header = response.getFirstHeader("Location"); // 跳转的目标地址是在 HTTP-HEAD上 String newuri = header.getValue(); // 这就是跳转后的地址,再向这个地址发出新申请 logger.error(newuri); post = new HttpPost(newuri); StringEntity newstringentity = new StringEntity(data, ContentType.create("application/json", "UTF-8")); post.setEntity(newstringentity); response = client.execute(post); resData = EntityUtils.toString(response.getEntity()); logger.error("请求出错: "+response.getStatusLine().getStatusCode()); } } client.close(); logger.info(resData); } catch (Exception e) { logger.error(e.getMessage(), e); } return resData; } }