HttpQuery httpClient with cookie sessionID
来源:互联网 发布:奥地利经济学派 知乎 编辑:程序博客网 时间:2024/05/21 22:22
httpClient-4.3.3 实用工具,提供个了cookie功能
maven:
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.3.3</version></dependency>
HttpQuery.java
import org.apache.http.Consts;import org.apache.http.Header;import org.apache.http.HttpResponse;import org.apache.http.NameValuePair;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.client.utils.URIBuilder;import org.apache.http.client.utils.URLEncodedUtils;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;import org.apache.http.impl.client.HttpClientBuilder;import org.apache.http.message.BasicNameValuePair;import org.apache.http.protocol.HTTP;import org.apache.http.util.EntityUtils;import org.apache.log4j.Logger;import java.net.URI;import java.net.URL;import java.util.*;import java.util.regex.Matcher;import java.util.regex.Pattern;public class HttpQuery { private static Logger log = Logger.getLogger(HttpQuery.class); private CloseableHttpClient httpClient = null; private HttpClientBuilder builder = null; private HttpGet httpGet = null; private HttpPost httpPost = null; private Header[] headers = null; private String cookies = null; private String referer; private Map<String, String> cookieMap = new HashMap<String, String>(); private Boolean autoClose = true; private String lastError; public HttpQuery(){ this(true); } public HttpQuery(boolean autoClose){ this.autoClose = autoClose; } public void setAutoClose(Boolean autoClose) { this.autoClose = autoClose; } /** * 在HttpClient 4.0+的版本,正确的关闭连接如下: * EntityUtils.consumeQuietly(response.getEntity()); * 在HttpClient 3.0+版本中,正确的关闭如下: * method.releaseConnection(); */ private void init() { if (this.httpClient == null) { builder = HttpClientBuilder.create(); RequestConfig.Builder reqBuild = RequestConfig.copy(RequestConfig.DEFAULT); reqBuild.setConnectTimeout(30 * 1000); reqBuild.setSocketTimeout(30 * 1000); reqBuild.setRedirectsEnabled(true); RequestConfig reqConfig = reqBuild.build();// builder.setRetryHandler(new DefaultHttpRequestRetryHandler());//默认失败后重发3次 builder.setDefaultRequestConfig(reqConfig); builder.setUserAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36"); this.httpClient = builder.build(); } } public String httpGet(String url, Map<String, Object> parameters) throws Exception { this.init(); URL reqURL = new URL(url); URI urlTemp = reqURL.toURI(); URIBuilder uriBuilder = new URIBuilder().setScheme(urlTemp.getScheme()).setHost(urlTemp.getHost()).setPort(urlTemp.getPort()).setPath(urlTemp.getPath()); String query = reqURL.getQuery(); uriBuilder.setParameters(URLEncodedUtils.parse(query, Consts.UTF_8)); if (parameters != null && parameters.size() > 0) { Iterator it = parameters.keySet().iterator(); while (it.hasNext()) { String key = (String) it.next(); if (key == null) continue; if (parameters.get(key) != null) { uriBuilder.setParameter(key, parameters.get(key).toString()); } else { uriBuilder.setParameter(key, ""); } } } URI uri = uriBuilder.build(); this.httpGet = new HttpGet(uri); RequestConfig.Builder reqBuild = RequestConfig.copy(RequestConfig.DEFAULT); RequestConfig requestConfig = reqBuild.build(); httpGet.setConfig(requestConfig); if (this.headers == null) this.headers = httpGet.getAllHeaders(); httpGet.addHeader("Referer", referer); httpGet.setHeader("Cookie", this.getCookies()); HttpResponse response = httpClient.execute(httpGet); this.referer = url; this.parseCookie(response); this.parseHeaders(response); String html = null; if (response != null) { html = EntityUtils.toString(response.getEntity()); EntityUtils.consumeQuietly(response.getEntity());//在HttpClient 4.0+的版本,正确的关闭连接 } if (this.autoClose) this.close(); return html; } public int getCode(){ return this.respCode; } private Header contentType; private void setContentType(Header contentType){ if(contentType!=null) { this.contentType = contentType; String content = this.contentType.getValue(); Pattern pattern = Pattern.compile("charset\\=(.*)"); Matcher m = pattern.matcher(content); if(m.find()){ this.contentEncoding = m.group(1); } } } public String getContentType(){ if(this.contentType!=null) return this.contentType.getValue(); return ""; } public void close() { if (this.httpClient != null) { try { this.httpClient.close(); } catch (Exception e) { e.printStackTrace(); log.error("httpClient.close error", e); } this.httpClient = null; this.builder = null; } } private void parseCookie(HttpResponse response) { Header[] cookieHeaders = response.getHeaders("Set-Cookie"); if (this.cookies == null) this.cookies = ""; for (Header s : cookieHeaders) { String str = s.toString().substring("Set-Cookie:".length()); String[] temps = str.split(";"); if (temps != null) { for (String temp : temps) { if (temp != null) { int index = temp.indexOf("="); if (index > 0 && temp.length() > (index + 1)) { this.cookieMap.put(temp.substring(0, index), temp.substring(index)); } } } } } } public Map getCookie(){ return this.cookieMap; } private String getCookies() { StringBuffer sb = new StringBuffer(); String[] keys = this.cookieMap.keySet().toArray(new String[0]); for (String key : keys) { sb.append(key); sb.append(this.cookieMap.get(key)); sb.append(";"); } return sb.toString(); } public Header[] getHeaders(){ return this.headers; } public int getRespCode(){ return this.respCode; } private int respCode = 200; private Object parseHeaders(HttpResponse response) throws Exception { this.headers = response.getAllHeaders(); this.respCode = response.getStatusLine().getStatusCode(); this.setContentType(response.getEntity().getContentType()); return null; } public String httpPost(String url) throws Exception { return this.httpPost(url, new HashMap<String, Object>()); } public String httpPost(String url, List<NameValuePair> params) throws Exception { Map<String, Object> map = new HashMap<String, Object>(); for (NameValuePair nameValuePair : params) { map.put(nameValuePair.getName(), nameValuePair.getValue()); } return this.httpPost(url, map); } public String httpPost(String url, Map<String, Object> parameters) throws Exception { this.init(); URL reqURL = new URL(url); URI urlTemp = reqURL.toURI(); URIBuilder uriBuilder = new URIBuilder().setScheme(urlTemp.getScheme()).setHost(urlTemp.getHost()).setPort(urlTemp.getPort()).setPath(urlTemp.getPath()); String query = reqURL.getQuery(); uriBuilder.setParameters(URLEncodedUtils.parse(query, Consts.UTF_8)); URI uri = uriBuilder.build(); this.httpPost = new HttpPost(uri); List<NameValuePair> list = null; if (parameters != null && parameters.size() > 0) { list = new ArrayList<NameValuePair>(); Iterator it = parameters.keySet().iterator(); while (it.hasNext()) { String key = (String) it.next(); if (key == null) continue; if (parameters.get(key) != null) list.add(new BasicNameValuePair(key, parameters.get(key).toString())); else list.add(new BasicNameValuePair(key, "")); } } if (list != null && list.size() > 0) httpPost.setEntity(new UrlEncodedFormEntity(list, HTTP.UTF_8)); if (this.headers == null) this.headers = httpPost.getAllHeaders(); httpPost.addHeader("Referer", referer); httpPost.setHeader("Cookie", this.getCookies()); HttpResponse response = httpClient.execute(httpPost); this.referer = url; this.parseCookie(response); this.parseHeaders(response); String html = null; if (response != null) { html = EntityUtils.toString(response.getEntity()); EntityUtils.consumeQuietly(response.getEntity());//在HttpClient 4.0+的版本,正确的关闭连接 } if (this.autoClose) this.close(); return html; } private String contentEncoding = "UTF-8"; public String getContentEncoding(){ return this.contentEncoding; } public void sleep(long seconds) { for (int i = 0; i < seconds; i++) { try { Thread.sleep(1000); System.out.print("."); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(""); }}
HttpUtil
import org.apache.http.Header;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import java.util.HashMap;import java.util.Map;import java.util.UUID;public class HttpUtil { public static Object getFirstValueFromRequest(String key, HttpServletRequest request){ Object value = null; //1. parameter value = request.getAttribute(key); if(value==null) value = request.getParameter(key); if(value==null) value = request.getHeader(key); if(value == null) value = getFirstCookie(key, request.getCookies()); return value; } /** * 从request中读取参数 * @param request * @param key * @return */ public static String getStringFromRequest(HttpServletRequest request, String key){ String value = (String)request.getAttribute(key); if(value==null) value = request.getParameter(key); if(value==null) value = request.getHeader(key); if(value==null) value = HttpUtil.getFirstCookie(key, request.getCookies()); return value; } /** * 从cookie中读取第一个符合的参数 * @param key * @param cookies * @return */ public static String getFirstCookie(String key,Cookie[] cookies){ if(cookies!=null && key!=null){ for(Cookie cookie : cookies){ if(key.equals(cookie.getName())) return cookie.getValue(); } } return null; } public static Map<String, Cookie> getCookieMap(HttpServletRequest request){ Map<String, Cookie> map = new HashMap<String, Cookie>(); Cookie[] cookies = request.getCookies(); if(cookies!=null){ for(Cookie cookie : cookies){ map.put( cookie.getName()+cookie.getPath(), (Cookie)cookie.clone()); } } return map; } public static String httpGet(String url, Map<String,Object> parameters)throws Exception{ HttpQuery httpQuery = new HttpQuery(); String html = httpQuery.httpGet(url, parameters); httpQuery.close(); return html; } public static Header[] httpGetHeaders(String url, Map<String,Object> parameters)throws Exception{ HttpQuery httpQuery = new HttpQuery(); httpQuery.setAutoClose(false); httpQuery.httpGet(url, parameters); Header[] headers = httpQuery.getHeaders(); return headers; } public static String httpPost(String url, Map<String,Object> parameters)throws Exception{ HttpQuery httpQuery = new HttpQuery(); String html = httpQuery.httpPost(url, parameters); return html; } public static String newAccessToken(){ String accessToken = UUID.randomUUID().toString(); return accessToken; } public static String getCookie(HttpServletRequest request, String cookieName){ Cookie[] cookies = request.getCookies(); for(Cookie cookie : cookies){ if(cookie.getName().trim().equals(cookieName.trim())) return cookie.getValue(); } return null; } public static String getRemortIP(HttpServletRequest request) { // 取代理ip地址 String ip = request.getHeader("x-forwarded-for"); // 取nginx代理设置的ip地址 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("x-real-ip"); } // 从网上取的 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } // 取JAVA获得的ip地址 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } // 去除unkonwn if (ip.startsWith("unknown")) { ip = ip.substring(ip.indexOf("unknown") + "unknown".length()); } // 去除多多余的信息 ip = ip.trim(); if (ip.startsWith(",")) { ip = ip.substring(1); } if (ip.indexOf(",") > 0) { ip = ip.substring(0, ip.indexOf(",")); } return ip; }}
Good luck!~
0 0
- HttpQuery httpClient with cookie sessionID
- httpClient post with cookie
- COOKIE中的SESSIONID
- SessionID Cookie 摘抄
- sessionID和cookie
- sessionID和cookie
- cookie session sessionid jsessionid
- session, sessionID和cookie
- sessionID与cookie
- cookie 内的sessionid
- session, sessionID和cookie
- HttpClient sessionID获取与设置
- cookie、session、sessionid 与jsessionid
- cookie、session、sessionid 与jsessionid
- cookie、session、sessionid 与jsessionid
- cookie、session、sessionid 与jsessionid
- cookie、session、sessionid 与jsessionid
- cookie、session、sessionid 与jsessionid
- 9-patch图片以及例子说明
- 数位DP的记忆化搜索形式
- 开始学习——爬取微博页面的html
- LCD设备驱动程序
- Android中View绘制流程以及invalidate()等相关方法分析 (1)
- HttpQuery httpClient with cookie sessionID
- 奇怪的排序____(Bin 神 OJ)
- 使用GCD时的内存管理问题
- 如何对从WIFI设备上获取的信息进行整理,要从哪些方面考虑,信息已解析好了。
- 测试代码修饰功能
- Palindrome Number
- CLLocationManager地理定位
- JPA总结——映射持久化对象(Entity)
- centos 之7zip