最近項目中,用到了登錄後獲取並攜帶cookies發起請求的業務場景,現總結寫出來備忘一下。java
1 public class HttpUtil { 2 3 /** 4 * 用來存取cookies信息的變量. 5 */ 6 private static CookieStore cookieStore;
1 public class HttpUtil { 2 3 /** 4 * 5 * @param httpUrl 6 * 地址 7 * @param paramMap 8 * 參數 9 * 10 */ 11 public static String loginPost(String httpUrl, Map<String, Object> paramMap) throws Exception { 12 if (log.isInfoEnabled()) { 13 log.info("請求httpUrl=" + httpUrl); 14 log.info("請求params=" + JSONObject.toJSONString(paramMap)); 15 } 16 17 // 建立httpPost 18 HttpPost httpPost = new HttpPost(httpUrl); 19 20 // 設置參數 21 List<NameValuePair> params = new ArrayList<>(); 22 if (paramMap != null && paramMap.size() > 0) { 23 Set<String> keySet = paramMap.keySet(); 24 for (String key : keySet) { 25 params.add(new BasicNameValuePair(key, UcopCommonUtil.convertString(paramMap.get(key)))); 26 } 27 httpPost.setEntity(new UrlEncodedFormEntity(params,"UTF-8")); 28 } 29 30 String response; 31 DefaultHttpClient httpClient = null; 32 try { 33 httpClient = new DefaultHttpClient(); 34 String contentCharset = CoreProtocolPNames.HTTP_CONTENT_CHARSET; 35 String soTimeOut = CoreConnectionPNames.SO_TIMEOUT; 36 String connectTimeOut = CoreConnectionPNames.CONNECTION_TIMEOUT; 37 httpClient.getParams().setParameter(contentCharset, "utf-8"); 38 httpClient.getParams().setParameter(soTimeOut, 60000); 39 httpClient.getParams().setParameter(connectTimeOut, 60000); 40 41 HttpResponse httpResponse = httpClient.execute(httpPost); 42 43 // 得到返回結果 44 response = EntityUtils.toString(httpResponse.getEntity(), UcopUtils.UCOP_DEFAULT_CHARSET); 45 46 // 得到cookie並存取 47 this.cookieStore = httpClient.getCookieStore(); 48 List<Cookie> cookieList = this.cookieStore.getCookies(); 49 for (Cookie cookie : cookieList){ 50 String name =cookie.getName(); 51 String value = cookie.getValue(); 52 log.info("登錄成功,cookie name = " + name + ", cookie value = " + value); 53 } 54 if (log.isInfoEnabled()) { 55 log.info("響應內容=" + response); 56 } 57 return response; 58 } catch (Exception e) { 59 log.error("HttpPost請求失敗:" + e.getMessage(), e); 60 throw new RuntimeException("HttpPost請求失敗:" + e.getMessage(), e); 61 } finally { 62 if (null != httpClient) { 63 httpClient.getConnectionManager().shutdown(); 64 } 65 } 66 }
1 public class HttpUtil { 2 3 /** 4 * 5 * @param url 請求地址 6 * @param paramMap 請求內容 7 * @return 響應內容 8 * @throws Exception 9 */ 10 public static String requestPostWithCookie(String url, Map<String, Object> paramMap) throws Exception { 11 if (log.isInfoEnabled()) { 12 log.info("post請求地址:" + url); 13 log.info("post請求內容:" + paramMap); 14 } 15 16 long beginTime = System.currentTimeMillis(); 17 try { 18 HttpClient httpClient = HttpClients.custom().setDefaultCookieStore(this.cookieStore).build(); 19 HttpPost httpPost = new HttpPost(url); 20 21 // 設置參數 22 List<NameValuePair> params = new ArrayList<>(); 23 if (paramMap != null && paramMap.size() > 0) { 24 Set<String> keySet = paramMap.keySet(); 25 for (String key : keySet) { 26 params.add(new BasicNameValuePair(key, UcopCommonUtil.convertString(paramMap.get(key)))); 27 } 28 httpPost.setEntity(new UrlEncodedFormEntity(params,"UTF-8")); 29 } 30 31 // 設置請求和傳輸超時時間 32 RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(120000).setConnectTimeout(120000).build(); 33 httpPost.setConfig(requestConfig); 34 35 // 發起請求 36 HttpResponse response = httpClient.execute(httpPost); 37 38 // 獲取響應數據並轉換成JSON 39 String resString = EntityUtils.toString(response.getEntity(), UcopUtils.UCOP_DEFAULT_CHARSET); 40 log.info("post響應內容: " + resString); 41 42 return resString; 43 } catch (Exception e) { 44 log.error("請求失敗:" + e.getMessage(), e); 45 throw e; 46 } finally { 47 log.info("結束post請求,耗時(ms):" + (System.currentTimeMillis() - beginTime)); 48 } 49 }
1 package com.zat.ucop.bus.service.impl; 2 3 import com.alibaba.fastjson.JSONObject; 4 import com.zat.ucop.service.util.UcopCommonUtil; 5 import com.zat.ucop.service.util.UcopUtils; 6 import org.apache.http.HttpResponse; 7 import org.apache.http.NameValuePair; 8 import org.apache.http.client.CookieStore; 9 import org.apache.http.client.HttpClient; 10 import org.apache.http.client.config.RequestConfig; 11 import org.apache.http.client.entity.UrlEncodedFormEntity; 12 import org.apache.http.client.methods.HttpPost; 13 import org.apache.http.cookie.Cookie; 14 import org.apache.http.impl.client.DefaultHttpClient; 15 import org.apache.http.impl.client.HttpClients; 16 import org.apache.http.message.BasicNameValuePair; 17 import org.apache.http.params.CoreConnectionPNames; 18 import org.apache.http.params.CoreProtocolPNames; 19 import org.apache.http.util.EntityUtils; 20 import org.slf4j.Logger; 21 import org.slf4j.LoggerFactory; 22 23 import java.util.ArrayList; 24 import java.util.List; 25 import java.util.Map; 26 import java.util.Set; 27 28 public class HttpUtil { 29 30 private static Logger log = LoggerFactory.getLogger(HttpUtil.class); 31 32 /** 33 * 用來存取cookies信息的變量. 34 */ 35 private static CookieStore cookieStore; 36 37 38 /** 39 * 40 * @param httpUrl 41 * 地址 42 * @param paramMap 43 * 參數 44 * 45 */ 46 public static String loginPost(String httpUrl, Map<String, Object> paramMap) throws Exception { 47 if (log.isInfoEnabled()) { 48 log.info("請求httpUrl=" + httpUrl); 49 log.info("請求params=" + JSONObject.toJSONString(paramMap)); 50 } 51 52 // 建立httpPost 53 HttpPost httpPost = new HttpPost(httpUrl); 54 55 // 設置參數 56 List<NameValuePair> params = new ArrayList<>(); 57 if (paramMap != null && paramMap.size() > 0) { 58 Set<String> keySet = paramMap.keySet(); 59 for (String key : keySet) { 60 params.add(new BasicNameValuePair(key, UcopCommonUtil.convertString(paramMap.get(key)))); 61 } 62 httpPost.setEntity(new UrlEncodedFormEntity(params,"UTF-8")); 63 } 64 65 String response; 66 DefaultHttpClient httpClient = null; 67 try { 68 httpClient = new DefaultHttpClient(); 69 String contentCharset = CoreProtocolPNames.HTTP_CONTENT_CHARSET; 70 String soTimeOut = CoreConnectionPNames.SO_TIMEOUT; 71 String connectTimeOut = CoreConnectionPNames.CONNECTION_TIMEOUT; 72 httpClient.getParams().setParameter(contentCharset, "utf-8"); 73 httpClient.getParams().setParameter(soTimeOut, 60000); 74 httpClient.getParams().setParameter(connectTimeOut, 60000); 75 76 HttpResponse httpResponse = httpClient.execute(httpPost); 77 78 // 得到返回結果 79 response = EntityUtils.toString(httpResponse.getEntity(), UcopUtils.UCOP_DEFAULT_CHARSET); 80 81 // 得到cookie並存取 82 cookieStore = httpClient.getCookieStore(); 83 List<Cookie> cookieList = cookieStore.getCookies(); 84 for (Cookie cookie : cookieList){ 85 String name =cookie.getName(); 86 String value = cookie.getValue(); 87 log.info("登錄成功,cookie name = " + name + ", cookie value = " + value); 88 } 89 if (log.isInfoEnabled()) { 90 log.info("響應內容=" + response); 91 } 92 return response; 93 } catch (Exception e) { 94 log.error("HttpPost請求失敗:" + e.getMessage(), e); 95 throw new RuntimeException("HttpPost請求失敗:" + e.getMessage(), e); 96 } finally { 97 if (null != httpClient) { 98 httpClient.getConnectionManager().shutdown(); 99 } 100 } 101 } 102 103 /** 104 * 105 * @param url 請求地址 106 * @param paramMap 請求內容 107 * @return 響應內容 108 * @throws Exception 109 */ 110 public static String requestPostWithCookie(String url, Map<String, Object> paramMap) throws Exception { 111 if (log.isInfoEnabled()) { 112 log.info("post請求地址:" + url); 113 log.info("post請求內容:" + paramMap); 114 } 115 116 long beginTime = System.currentTimeMillis(); 117 try { 118 HttpClient httpClient = HttpClients.custom().setDefaultCookieStore(cookieStore).build(); 119 HttpPost httpPost = new HttpPost(url); 120 121 // 設置參數 122 List<NameValuePair> params = new ArrayList<>(); 123 if (paramMap != null && paramMap.size() > 0) { 124 Set<String> keySet = paramMap.keySet(); 125 for (String key : keySet) { 126 params.add(new BasicNameValuePair(key, UcopCommonUtil.convertString(paramMap.get(key)))); 127 } 128 httpPost.setEntity(new UrlEncodedFormEntity(params,"UTF-8")); 129 } 130 131 // 設置請求和傳輸超時時間 132 RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(120000).setConnectTimeout(120000).build(); 133 httpPost.setConfig(requestConfig); 134 135 // 發起請求 136 HttpResponse response = httpClient.execute(httpPost); 137 138 // 獲取響應數據並轉換成JSON 139 String resString = EntityUtils.toString(response.getEntity(), UcopUtils.UCOP_DEFAULT_CHARSET); 140 log.info("post響應內容: " + resString); 141 142 return resString; 143 } catch (Exception e) { 144 log.error("請求失敗:" + e.getMessage(), e); 145 throw e; 146 } finally { 147 log.info("結束post請求,耗時(ms):" + (System.currentTimeMillis() - beginTime)); 148 } 149 } 150 151 }
1 package com.zat.ucop.bus.service.impl; 2 3 import com.alibaba.fastjson.JSONObject; 4 import com.zat.ucop.service.util.UcopCommonUtil; 5 import com.zat.ucop.service.util.UcopUtils; 6 import org.apache.http.HttpResponse; 7 import org.apache.http.NameValuePair; 8 import org.apache.http.client.CookieStore; 9 import org.apache.http.client.HttpClient; 10 import org.apache.http.client.config.RequestConfig; 11 import org.apache.http.client.entity.UrlEncodedFormEntity; 12 import org.apache.http.client.methods.HttpPost; 13 import org.apache.http.cookie.Cookie; 14 import org.apache.http.impl.client.DefaultHttpClient; 15 import org.apache.http.impl.client.HttpClients; 16 import org.apache.http.message.BasicNameValuePair; 17 import org.apache.http.params.CoreConnectionPNames; 18 import org.apache.http.params.CoreProtocolPNames; 19 import org.apache.http.util.EntityUtils; 20 import org.slf4j.Logger; 21 import org.slf4j.LoggerFactory; 22 23 import java.util.ArrayList; 24 import java.util.List; 25 import java.util.Map; 26 import java.util.Set; 27 28 public class HttpUtil { 29 30 private static Logger log = LoggerFactory.getLogger(HttpUtil.class); 31 32 /** 33 * 用來存取cookies信息的變量. 34 */ 35 private static CookieStore cookieStore; 36 37 38 /** 39 * 40 * @param httpUrl 41 * 地址 42 * @param paramMap 43 * 參數 44 * 45 */ 46 public static String loginPost(String httpUrl, Map<String, Object> paramMap) throws Exception { 47 if (log.isInfoEnabled()) { 48 log.info("請求httpUrl=" + httpUrl); 49 log.info("請求params=" + JSONObject.toJSONString(paramMap)); 50 } 51 52 // 建立httpPost 53 HttpPost httpPost = new HttpPost(httpUrl); 54 55 // 設置參數 56 List<NameValuePair> params = new ArrayList<>(); 57 if (paramMap != null && paramMap.size() > 0) { 58 Set<String> keySet = paramMap.keySet(); 59 for (String key : keySet) { 60 params.add(new BasicNameValuePair(key, UcopCommonUtil.convertString(paramMap.get(key)))); 61 } 62 httpPost.setEntity(new UrlEncodedFormEntity(params,"UTF-8")); 63 } 64 65 String response; 66 DefaultHttpClient httpClient = null; 67 try { 68 httpClient = new DefaultHttpClient(); 69 String contentCharset = CoreProtocolPNames.HTTP_CONTENT_CHARSET; 70 String soTimeOut = CoreConnectionPNames.SO_TIMEOUT; 71 String connectTimeOut = CoreConnectionPNames.CONNECTION_TIMEOUT; 72 httpClient.getParams().setParameter(contentCharset, "utf-8"); 73 httpClient.getParams().setParameter(soTimeOut, 60000); 74 httpClient.getParams().setParameter(connectTimeOut, 60000); 75 76 HttpResponse httpResponse = httpClient.execute(httpPost); 77 78 // 得到返回結果 79 response = EntityUtils.toString(httpResponse.getEntity(), UcopUtils.UCOP_DEFAULT_CHARSET); 80 81 // 得到cookie並存取 82 cookieStore = httpClient.getCookieStore(); 83 List<Cookie> cookieList = cookieStore.getCookies(); 84 for (Cookie cookie : cookieList){ 85 String name =cookie.getName(); 86 String value = cookie.getValue(); 87 log.info("登錄成功,cookie name = " + name + ", cookie value = " + value); 88 } 89 if (log.isInfoEnabled()) { 90 log.info("響應內容=" + response); 91 } 92 return response; 93 } catch (Exception e) { 94 log.error("HttpPost請求失敗:" + e.getMessage(), e); 95 throw new RuntimeException("HttpPost請求失敗:" + e.getMessage(), e); 96 } finally { 97 if (null != httpClient) { 98 httpClient.getConnectionManager().shutdown(); 99 } 100 } 101 } 102 103 }
1 package com.zat.ucop.bus.service.impl; 2 3 import com.alibaba.fastjson.JSONObject; 4 import com.zat.ucop.service.util.UcopCommonUtil; 5 import com.zat.ucop.service.util.UcopUtils; 6 import org.apache.http.HttpResponse; 7 import org.apache.http.NameValuePair; 8 import org.apache.http.client.CookieStore; 9 import org.apache.http.client.HttpClient; 10 import org.apache.http.client.config.RequestConfig; 11 import org.apache.http.client.entity.UrlEncodedFormEntity; 12 import org.apache.http.client.methods.HttpPost; 13 import org.apache.http.cookie.Cookie; 14 import org.apache.http.impl.client.DefaultHttpClient; 15 import org.apache.http.impl.client.HttpClients; 16 import org.apache.http.message.BasicNameValuePair; 17 import org.apache.http.params.CoreConnectionPNames; 18 import org.apache.http.params.CoreProtocolPNames; 19 import org.apache.http.util.EntityUtils; 20 import org.slf4j.Logger; 21 import org.slf4j.LoggerFactory; 22 23 import java.util.ArrayList; 24 import java.util.List; 25 import java.util.Map; 26 import java.util.Set; 27 28 public class HttpUtil { 29 30 private static Logger log = LoggerFactory.getLogger(HttpUtil.class); 31 32 /** 33 * 用來存取cookies信息的變量. 34 */ 35 private static CookieStore cookieStore; 36 37 38 /** 39 * 40 * @param url 請求地址 41 * @param paramMap 請求內容 42 * @return 響應內容 43 * @throws Exception 44 */ 45 public static String requestPostWithCookie(String url, Map<String, Object> paramMap) throws Exception { 46 if (log.isInfoEnabled()) { 47 log.info("post請求地址:" + url); 48 log.info("post請求內容:" + paramMap); 49 } 50 51 long beginTime = System.currentTimeMillis(); 52 try { 53 CookieStore cookieStore = new BasicCookieStore(); 54 HttpClient httpClient = HttpClients.custom().setDefaultCookieStore(cookieStore).build(); 55 HttpPost httpPost = new HttpPost(url); 56 57 // 設置參數 58 List<NameValuePair> params = new ArrayList<>(); 59 if (paramMap != null && paramMap.size() > 0) { 60 Set<String> keySet = paramMap.keySet(); 61 for (String key : keySet) { 62 params.add(new BasicNameValuePair(key, UcopCommonUtil.convertString(paramMap.get(key)))); 63 } 64 httpPost.setEntity(new UrlEncodedFormEntity(params,"UTF-8")); 65 } 66 67 // 設置請求和傳輸超時時間 68 RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(120000).setConnectTimeout(120000).build(); 69 httpPost.setConfig(requestConfig); 70 71 // 發起請求 72 HttpResponse response = httpClient.execute(httpPost); 73 74 List<Cookie> cookieList = cookieStore.getCookies(); 75 for (Cookie cookie : cookieList){ 76 String name =cookie.getName(); 77 String value = cookie.getValue(); 78 log.info("cookie name = " + name + ", cookie value = " + value); 79 } 80 81 // 獲取響應數據並轉換成JSON 82 String resString = EntityUtils.toString(response.getEntity(), UcopUtils.UCOP_DEFAULT_CHARSET); 83 log.info("post響應內容: " + resString); 84 85 return resString; 86 } catch (Exception e) { 87 log.error("請求失敗:" + e.getMessage(), e); 88 throw e; 89 } finally { 90 log.info("結束post請求,耗時(ms):" + (System.currentTimeMillis() - beginTime)); 91 } 92 } 93 94 } 95