首页 > 代码库 > HttpClient-4.3.4使用工具类
HttpClient-4.3.4使用工具类
封装HttpClient 4.3.4 ,方便日后抓取数据,数据提交(待Cookie访问、302跳转访问):
package util;import java.io.IOException;import java.util.ArrayList;import java.util.List;import java.util.Map;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.http.HttpEntity;import org.apache.http.NameValuePair;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.CookieStore;import org.apache.http.client.config.RequestConfig;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;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;/*** 网页抓取,httpclient-4.3.4 调用* 类名称:HttpUtil.java* 创建时间:2014-12-1* 修改备注: * @version 1.0 */public class HttpUtil { private static final Log log = LogFactory.getLog(HttpUtil.class); public static String get(String url){ //初始化一个httpClient /* 带Cookie方式初始化 httpclient 作为全局变量,不要关闭 CloseableHttpClient httpclient; CookieStore cookieStore; String cookies ="user=155;pwd=2545454weafadfwef"; if (cookieStore==null) { cookieStore = new BasicCookieStore(); String[] ckArr = cookies.split(";"); for (String ck : ckArr) { String[] tempArr = ck.split("="); if (tempArr.length==2) { BasicClientCookie cookie = new BasicClientCookie(tempArr[0].trim(), tempArr[1].trim()); cookie.setVersion(1); cookie.setDomain("pub.alimama.com"); cookie.setPath("/"); cookieStore.addCookie(cookie); } } } httpclient = HttpClients.custom().setDefaultCookieStore(cookieStore).build(); */ //普通方式构造 httpclient CloseableHttpClient httpclient = HttpClients.createDefault(); return get(url,httpclient); } /** * get方式获取网页内容 * @param url 网址 * @param httpclient httpclient 实例 * @param referer 构造来源地址 * @return */ public static String get(String url,CloseableHttpClient httpclient,String referer){ String html =""; try { HttpGet httpGet = new HttpGet(url); Integer timeOut = 30000; //30 秒 超时 RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(timeOut) .setConnectTimeout(timeOut).setSocketTimeout(timeOut).build(); httpGet.setConfig(requestConfig); if (referer!=null) { httpGet.setHeader("referer", referer); } CloseableHttpResponse response = null; try { response = httpclient.execute(httpGet); HttpEntity entity = response.getEntity(); html = EntityUtils.toString(entity); } catch (ClientProtocolException e) { log.error("http协议异常:"+e.getMessage()); } catch (IOException e) { log.error("http读取异常:"+e.getMessage()); }catch (Exception e) { log.error("httpException:"+e.getMessage()); }finally { try { response.close(); } catch (IOException e) { log.error("http输出流关闭错误:"+e.getMessage()); } } } finally { } return html; } /** * get方式获取网页内容 * @param url 网址 * @param httpclient httpclient 实例 * @return */ public static String get(String url,CloseableHttpClient httpclient){ return get(url, httpclient, null); } /** * post方式提交数据,获取网页内容 * @param url 网址 * @param parmas Map<String, String>方式存放数据名称和值 * @param httpclient httpclient 实例 * @param referer 构造来源地址 * @return */ public static String post(String url, Map<String, String> parmas,CloseableHttpClient httpclient,String referer){ String html =""; try { HttpPost httpPost = new HttpPost(url); Integer timeOut = 30000; //30 秒 超时 RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(timeOut) .setConnectTimeout(timeOut).setSocketTimeout(timeOut).build(); httpPost.setConfig(requestConfig); if (referer!=null) { httpPost.setHeader("referer", referer); } CloseableHttpResponse response = null; try { //参数设置 List <NameValuePair> nvps = new ArrayList <NameValuePair>(); for (String key : parmas.keySet()) { nvps.add(new BasicNameValuePair(key, parmas.get(key))); } httpPost.setEntity(new UrlEncodedFormEntity(nvps)); response = httpclient.execute(httpPost); HttpEntity entity = response.getEntity(); html = EntityUtils.toString(entity); } catch (ClientProtocolException e) { log.error("http协议异常:"+e.getMessage()); } catch (IOException e) { log.error("http读取异常:"+e.getMessage()); }catch (Exception e) { log.error("httpException:"+e.getMessage()); }finally { try { response.close(); } catch (IOException e) { log.error("http输出流关闭错误:"+e.getMessage()); } } } finally { } return html; } /** * post方式提交数据,获取网页内容 * @param url 网址 * @param parmas Map<String, String>方式存放数据名称和值 * @param httpclient httpclient 实例 * @return */ public static String post(String url, Map<String, String> parmas,CloseableHttpClient httpclient){ return post(url, parmas, httpclient, null); } /** * 简单方式,post方式提交数据,获取网页内容 * @param url 网址 * @param parmas Map<String, String>方式存放数据名称和值 * @return */ public static String post(String url, Map<String, String> parmas){ CloseableHttpClient httpclient = HttpClients.createDefault(); return post(url, parmas,httpclient); } /** * 302连续跳转,获取真实连接 * @param url * @param cookieStore * @return */ public static String get302(String url,CookieStore cookieStore) { CloseableHttpClient httpclient = HttpClients.custom().setDefaultCookieStore(cookieStore).build(); HttpGet httpget = new HttpGet(url); Integer timeOut = 20000; //30 秒 超时 RequestConfig requestConfig = RequestConfig.custom().setRedirectsEnabled(false).setCircularRedirectsAllowed(false).setConnectionRequestTimeout(timeOut) .setConnectTimeout(timeOut).setSocketTimeout(timeOut).build(); httpget.setConfig(requestConfig); CloseableHttpResponse response = null; try { response = httpclient.execute(httpget); int status = response.getStatusLine().getStatusCode(); if (status==302) { url = response.getFirstHeader("Location").getValue(); return get302(url,cookieStore); }else { HttpEntity entity = response.getEntity(); return EntityUtils.toString(entity); } } catch (Exception e) { System.err.println("获取失败"); } finally { try { response.close(); httpclient.close(); } catch (IOException e) {} } return null; }}
HttpClient-4.3.4使用工具类
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。