文档章节

httpclient模拟浏览器获取数据

东极没有雪
 东极没有雪
发布于 2017/06/05 14:30
字数 513
阅读 117
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

package com.fh.netpf.crawler.test;

import java.io.IOException;

import org.apache.http.HttpEntity; import org.apache.http.HttpHost; import org.apache.http.client.CookieStore; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.config.Registry; import org.apache.http.config.RegistryBuilder; import org.apache.http.cookie.Cookie; import org.apache.http.cookie.CookieOrigin; import org.apache.http.cookie.CookieSpec; import org.apache.http.cookie.CookieSpecProvider; import org.apache.http.cookie.MalformedCookieException; import org.apache.http.impl.client.BasicCookieStore; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.cookie.DefaultCookieSpec; import org.apache.http.protocol.HttpContext; import org.apache.http.util.EntityUtils; import org.jsoup.Jsoup; import org.jsoup.nodes.Document;

public class Test {

public static void main(String[] args) {

	String url = "http://www.163.com/";
	HttpHost proxy = null;
	CloseableHttpClient client = null;
	CloseableHttpResponse response = null;
	// 使用代理proxy(可以根据实际需要使用) 1-使用代理,0-不使用代理
	int flag = 0;
	if (flag == 1) {
		proxy = new HttpHost("代理IP", 80); // 填写代理IP和端口
	}
	try {
		HttpGet httpGet = new HttpGet(url);
		String[] randomAgent = {
				"Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3; rv:11.0) like Gecko",
				"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)",
				"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
				"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser)",
				"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)" };
		int index = (int) (Math.random() * randomAgent.length);
		String randAgent = randomAgent[index];
		httpGet.setHeader("User-Agent", randAgent);
		httpGet.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
		httpGet.setHeader("Accept-Encoding", "gzip, deflate, br");
		httpGet.setHeader("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3");
		httpGet.setHeader("Connection", "keep-alive");
		httpGet.setHeader("Upgrade-Insecure-Requests", "1");

		RequestConfig requestConfig = null;
		if (flag == 1) {
			requestConfig = RequestConfig.custom().setConnectTimeout(50000).setConnectionRequestTimeout(50000)
					.setCookieSpec("easy").setSocketTimeout(50000).setProxy(proxy).build();
		} else {
			requestConfig = RequestConfig.custom().setConnectTimeout(50000).setConnectionRequestTimeout(50000)
					.setCookieSpec("easy").setSocketTimeout(50000).build();
		}

		httpGet.setConfig(requestConfig);

		// cookie验证 (可以根据实际需要使用)
		class EasyCookieSpec extends DefaultCookieSpec {
			[@Override](https://my.oschina.net/u/1162528)
			public void validate(Cookie arg0, CookieOrigin arg1) throws MalformedCookieException {
				// allow all cookies
			}
		}
		class EasySpecProvider implements CookieSpecProvider {
			[@Override](https://my.oschina.net/u/1162528)
			public CookieSpec create(HttpContext context) {
				return new EasyCookieSpec();
			}
		}
		Registry<CookieSpecProvider> r = RegistryBuilder.<CookieSpecProvider>create()
				.register("easy", new EasySpecProvider()).build();
		CookieStore cookieStore = new BasicCookieStore();

		// CloseableHttpClient client = HttpClients.createDefault();
		client = HttpClients.custom().setDefaultCookieStore(cookieStore).setDefaultCookieSpecRegistry(r)
				.setDefaultRequestConfig(requestConfig).build();

		response = client.execute(httpGet);
		String web = null;
		if (response.getStatusLine().getStatusCode() == 200) {
			HttpEntity entity = response.getEntity();
			if (entity != null) {
				web = EntityUtils.toString(entity, "UTF-8");
				EntityUtils.consume(entity);
				System.out.println(web);
				// Document doc = Jsoup.parse(web);
			}
		}
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		try {
			client.close();
			response.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	// 根据实际是否使用线程sleep
	try {
		Thread.sleep(5000l);
	} catch (InterruptedException e1) {
		e1.printStackTrace();
	}
}

}

东极没有雪
粉丝 0
博文 6
码字总数 904
作品 0
南京
程序员
私信 提问
加载中
请先登录后再评论。
beego API开发以及自动化文档

beego API开发以及自动化文档 beego1.3版本已经在上个星期发布了,但是还是有很多人不了解如何来进行开发,也是在一步一步的测试中开发,期间QQ群里面很多人都问我如何开发,我的业余时间实在...

astaxie
2014/06/25
2.7W
22
程序猿媛一:Android滑动翻页+区域点击事件

滑动翻页+区域点击事件 ViewPager+GrideView 声明:博文为原创,文章内容为,效果展示,思路阐述,及代码片段。文尾附注源码获取途径。 转载请保留原文出处“http://my.oschina.net/gluoyer...

花佟林雨月
2013/11/09
4.2K
1
CSS Browser Selector

CSS Browser Selector 是一个小的 JS 库,可增强 CSS 的选择器功能,支持根据不同的操作系统和浏览器来编写指定的 CSS 代码,可检测浏览器、浏览器版本、平台、平台版本、设备、设备版本、m...

匿名
2013/01/17
2.8K
1
在多个浏览器上运行脚本--Queen

假设你想和朋友们玩这么个游戏:你写下某个数字,然后让朋友们猜你写的是什么数字。你的朋友们将不断的给你一些猜测的数字,直到猜中为止。 现在想象你的朋友都是使用的浏览器,这个游戏就相...

匿名
2013/01/24
4.5K
1
开源渲染器--LuxRender

LuxRender 是一款物理真实的、无偏差的开源渲染器。 LuxRender渲染是根据渲染方程来模拟光的传输,生成物理真实的图像。但LuxRender 只是一款渲染程序而不是3D建模程序,它需要其它3D程序来创...

匿名
2013/03/03
1W
0

没有更多内容

加载失败,请刷新页面

加载更多

在视图控制器之间传递数据 - Passing Data between View Controllers

问题: I'm new to iOS and Objective-C and the whole MVC paradigm and I'm stuck with the following: 我是iOS和Objective-C以及整个MVC范例的新手,但我坚持以下几点: I have a view th......

fyin1314
29分钟前
6
0
Elasticsearch中mapping值得注意的一些小细节

简介 在Elasticsearch中mapping有很多可以配置的地方,但是使用多了就会发现,一般情况有关mapping最常用、也最实用的就简单的几个需要注意的地方。 下面就简单的介绍一下关于这些mapping中值...

trayvon
32分钟前
0
0
趣味编程-大鱼吃小鱼(5-7岁)

上一节老师教小朋友们编写了摘星星的游戏,今天跟着了老师学一下大鱼吃小鱼这个游戏吧!拿上你们的平板,跟着老师一起来做吧。 防止失联,点个“在看”!多多转发分享是老师录制视频的动力哦...

rainbow0124
今天
1
0
大集合!写作辅助工具

↑公众号关注 “Graph-AI” 专注于 图机器学习 大集合!论文写作辅助工具 这里收集论文写作过程中的辅助工具,比如包括Latex、画图、图表、语法、词语搭配、文献查找\下载\整理、翻译等。 会...

chengsen
08/01
0
0
SSL指纹的自定义功能-VMLogin 中文版防关联指纹浏览器在1.2.6.7 版本更新中加入

VMLogin 中文版指纹浏览器 在本次1.2.6.7 版本更新中加入了SSL指纹的自定义功能。 VMLogin 中文版浏览器:https://www.vmlogin.cc/ 主要可以设置 密码套件 的个数和顺序,这样能可以对抗一些...

VMlogin中文版防关联浏览器
44分钟前
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部