文档章节

HttpClient设置WebDriver登录的Cookies

蜡笔小小小新
 蜡笔小小小新
发布于 2016/10/17 16:42
字数 330
阅读 566
收藏 1

HttpUtils,HTTP工具类,处理HTTP请求和响应.

import java.io.IOException;
import java.util.List;
import java.util.Set;

import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.CookieStore;
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.client.protocol.HttpClientContext;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.cookie.BasicClientCookie;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;
import org.openqa.selenium.Cookie;

/**
 * UttpUtils
 * @author lin
 * 2016-10-15
 */
public class HttpUtils {
	
	private static CloseableHttpClient httpClient = HttpClients.createDefault();
	private static HttpContext httpContext = new BasicHttpContext();
	private static HttpClientContext context = HttpClientContext.adapt(httpContext);

	private HttpUtils() {

	}
	
	/**
	 * 发送GET命令,并设置Cookies.
	 */
	public static String sendGet(String url,String host,Set<Cookie> cookies) {
		
		/**
		 * 设置Cookie,这里把Selenium登录成功的Cookie放进HttpClient的context
		 */
        CookieStore cookieStore = new BasicCookieStore(); 
        for(Cookie cookie : cookies){
        	BasicClientCookie bc = new BasicClientCookie(cookie.getName(),cookie.getValue());
        	bc.setPath("/");
        	bc.setDomain(host);
        	bc.setVersion(0);
        	cookieStore.addCookie(bc);
        }
//        httpClient = HttpClients.custom()
//                .setDefaultCookieStore(cookieStore) 
//                .build();
        //httpContext.setAttribute(HttpClientContext.COOKIE_STORE, cookieStore); 
        context.setAttribute(HttpClientContext.COOKIE_STORE, cookieStore);
		
		CloseableHttpResponse response = null;
		String content = null;
		try {
			HttpGet get = new HttpGet(url);
			
			//设置httpGet的头部参数信息   
	        get.setHeader("Accept", "text/html, application/xhtml+xml, */*");  
	        get.setHeader("Accept-Encoding", "gzip, deflate");  
	        get.setHeader("Accept-Language", "en-US");  
	        get.setHeader("User-Agent", "User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)");  
	        
			response = httpClient.execute(get, context);
			
			HttpEntity entity = response.getEntity();
			content = EntityUtils.toString(entity);
			
			EntityUtils.consume(entity);//关闭
			
			return content;
		} catch (Exception e) {
			e.printStackTrace();
			if (response != null) {
				try {
					response.close();
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}
		}
		return content;
	}

	/**
     * 处理POST
     */

}

上面sendGET方法中的Cookies是Selenium封装的Cookie。

获得WebDriver登录的Cookie

/**
	 * 得到Cookies.
	 * @param webDriver
	 * @return
	 */
	private static Set<Cookie> getCookies(WebDriver webDriver){
		Set<Cookie> cookies = webDriver.manage().getCookies();
		return cookies;
	}

执行GET命令,并在HttpClient的Context中设置Cookies

//......
String pageSource = HttpUtils.sendGet(webDriver.getCurrentUrl(),"my.alipay.com",getCookies(webDriver));
		System.out.println(pageSource);
		
		Document document = Jsoup.parse(pageSource);
		System.out.println(fetch(document));

//......

 

© 著作权归作者所有

蜡笔小小小新
粉丝 33
博文 114
码字总数 75210
作品 0
深圳
后端工程师
私信 提问
一个c#的与web服务器交互的HttpClient类

.Net类库里提供了HttpWebRequest等类,方便我们编程与Web服务器进行交互. 但是实际使用中我们经常会遇到以下需求, 基础类里没有直接提供相应的功能 (WebClient类包含这些功能,只是用起来稍微麻...

鉴客
2011/12/16
3.1K
1
爬虫--[HttpClient]

爬虫技术可以获取互联网上开放的网页文档或其他文档,在java中HttpClient是比较好用的模拟请求和爬虫组件 下面看一个简单的职位爬去的实例: 1 下载HttpClient 最新HttpClient版本是4.x,我们...

Candy_Desire
2014/11/06
0
0
HttpClient, 使用C#操作Web

我们知道, .Net类库里提供了HttpWebRequest等类,方便我们编程与Web服务器进行交互. 但是实际使用中我们经常会遇到以下需求, 基础类里没有直接提供相应的功能 ( WebClient类包含这些功能,只是...

鉴客
2011/12/16
980
0
HttpComponents Client 4.5.2 发布

HttpComponents Client 4.5.2 发布了,改进记录: Changelog: ------------------- * [HTTPCLIENT-1710, HTTPCLIENT-1718, HTTPCLEINT-1719] OSGi container compatibility improvements. Co......

淡漠悠然
2016/03/02
3K
2
【J2EE系列】HttpClient 学习整理 [转]

HttpClient 是我最近想研究的东西,以前想过的一些应用没能有很好的实现,发现这个开源项目之后就有点眉目了,令人头痛的cookie问题还是有办法解决滴。在网上整理了一些东西,写得很好,寄放...

磊神Ray
2012/01/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

读书replay《maven实战》.1.20190526

前情提要 maven这个工具用了好久了,但是一直都用的迷迷糊糊的,没有对它进行过系统性的学习,只是知道一些常用的功能怎么实现,所以20190516这一天我从JD购买了徐晓斌老师所著的《maven实战...

wanxiangming
25分钟前
0
0
真实项目案例实战——【状态设计模式】使用场景

什么是状态模式 状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。 状态模式应用场景 1.一个对象的行为取决于它的状态,并且它必须在运行时刻根...

须臾之余
32分钟前
0
0
Java 实现把字符串转换成整数【底层实现】

https://blog.csdn.net/zl18310999566/article/details/80263396

qimh
35分钟前
0
0
IDEA的debugger

1、win下节省内存空间 3、条件断点

一只小青蛙
46分钟前
3
0
炸!亿级数据DB秒级平滑扩容

一步一步,娓娓道来。 一般来说,并发量大,吞吐量大的互联网分层架构是怎么样的? 数据库上层都有一个微服务,服务层记录“业务库”与“数据库实例配置”的映射关系,通过数据库连接池向数据...

编程SHA
52分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部