HttpClient是一个很方便进行Http连接操作的工具包,用它可以设置代理和模拟浏览器下载网页,对于爬虫程序来说,是特别好的工具。
它提供的 HTTP 的访问主要是通过 GetMethod 类和 PostMethod 类来实现的,他们分别对应了 HTTP Get 请求与 Http Post 请求.
下面我分别给出两种访问方式的代码及注意事项:
get方式:
//生成 HttpClinet 对象
HttpClient client = new DefaultHttpClient();
//生成 GetMethod 对象
HttpGet httpGet = new HttpGet( psURL );
//设置请求头,这里很关键,细节在注意事项中描述
httpGet.setHeader("user-agent", "Mozilla/5.0 (Windows NT 5.1; rv:8.0.1) Gecko/20100101") ;
httpGet.setHeader("accept", "*/*") ;
httpGet.setHeader("accept-language", "zh-CN") ;
httpGet.setHeader("accept-encoding", "utf-8, deflate") ;
StringBuffer strBuf = new StringBuffer();
try {
//执行 HTTP GET 请求,获取响应
HttpResponse response = client.execute(httpGet);
//根据响应码判断是否正确获取响应
if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) {
//若正确获得响应则对内容进行处理
HttpEntity entity = response.getEntity();
if (entity != null) {
BufferedReader reader = new BufferedReader(
new InputStreamReader(entity.getContent(), "UTF-8"));
String line = null;
if (entity.getContentLength() > 0) {
strBuf = new StringBuffer((int) entity.getContentLength());
while ((line = reader.readLine()) != null) {
strBuf.append(line);
}
}
}
//释放连接
if (entity != null) {
EntityUtils.consume(entity);
}
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
post方式:
//存放参数
List<NameValuePair> nvps= new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("txtUserName", UAERNAME));
nvps.add(new BasicNameValuePair("txtPassword", PASSWORD));
nvps.add(new BasicNameValuePair("ImageButton1.x", "17"));
nvps.add(new BasicNameValuePair("ImageButton1.y", "10"));
nvps.add(new BasicNameValuePair("__VIEWSTATE", FLAG));
//生成 PostMethod 对象
HttpPost httpPostLogin = new HttpPost(URL)
//添加参数
httpPostLogin.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
//以下为执行请求,获取响应,并对响应进行处理,与get方式类似
httpResponseLogin = getHttpClientInstance().execute(httpPostLogin);
status=httpResponseLogin.getStatusLine().getStatusCode();
if (status == 302||status==HttpStatus.SC_OK) {
Header[] locationHeader = httpResponseLogin.getHeaders("location");
if (locationHeader != null) {
HttpEntity httpEntityLogin = httpResponseLogin.getEntity();
if (httpEntityLogin != null) {
EntityUtils.consume(httpEntityLogin);
}
}
}
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
以下为我在写爬虫程序的时候遇到的问题及解决方案,权作注意事项吧:
1、关于get方式设置请求头的问题,最令人头疼:
1)、上面实例中列出的四种请求头一般情况下已够用,无需添加。
2)、要特别注意accept-encoding的值,有两种:gzip, deflate 和utf-8, deflate。
gzip是经过压缩的大量数据的,一般不常用;
utf-8符合一般使用规律,具体可以两种都尝试一下,或者干脆不加该请求头。
2、无论哪种方式,接受后一定要使用
EntityUtils.consume(entity);释放连接
分享到:
相关推荐
本教程将聚焦于如何使用HTMLPARSER和HTTPCLIENT库来构建一个基础的网络爬虫。这两个工具是Java开发者常用来解析HTML和进行HTTP请求的重要库。 首先,HTMLPARSER是一个开源的Java库,它可以解析HTML文档并提供类似于...
初级爬虫
本篇文章将深入探讨HttpClient库以及与其相关的HTMLParser,帮助你更好地理解和应用这些工具来构建高效的网络爬虫。 首先,HttpClient库是Apache软件基金会的一个开源项目,提供了一套全面的API,用于执行各种HTTP...
**JSoup + HttpClient 简单爬虫** 在信息技术领域,数据抓取,或称“爬虫”,是一种自动化获取网页信息的技术。JavaScript Object Notation (JSON) Soup 和 HttpClient 是两个在Java开发中常用于实现爬虫功能的库。...
本文将详细探讨使用Java中的两种库——HttpClient和Jsoup,以及它们结合使用来构建网页爬虫的方法。 HttpClient是Apache软件基金会的一个项目,提供了对HTTP协议的全面支持,包括请求/响应模型、连接管理、重定向...
在阅读博文《网络爬虫 apache HttpClient》时,作者可能详细介绍了如何初始化HttpClient实例,设置请求参数,处理响应,以及如何利用HttpClient进行多线程爬虫开发。文章可能还会涵盖一些实战案例,比如抓取特定网站...
在使用HttpClient和HtmlParser实现网络爬虫的过程中,首先需要设置开发环境。这里推荐使用Eclipse Europa作为集成开发环境(IDE),并确保安装了JDK 1.6。在Eclipse中创建一个新的JAVA工程,并将HttpClient和...
常见的Java爬虫库包括Jsoup、HttpClient、HtmlUnit等,它们各具特色,能够处理不同类型的网页内容。 ### Jsoup库解析 Jsoup是一个强大的HTML解析器,它可以帮助开发者从HTML文档中提取和操作数据。Jsoup可以连接到...
综上所述,HttpClientHelper 是一个实用的HTTP客户端工具类,结合了HttpClient的强大功能和单例模式的高效管理,为C#开发者提供了便捷的网络请求解决方案,特别适合于爬虫开发和需要频繁进行HTTP通信的项目。
java爬虫,代码写的有点丑,反正是能用。 今天给大家分享一个多线程的知识点,和线程池,最近任务是写爬虫,五百个网址,循环很慢,然后考虑用多线程,今天看了一下多线程,氛围继承thread 和实现runnuble接口,...
httpclient-4.3.3.jar httpclient-cache-4.3.3.jar httpcore-4.3.2.jar httpmime-4.3.3.jar javabase64-1.3.1.jar json.jar json-lib-2.4-jdk15.jar jsoup_1.6.2_add.jar mysql-connector-java.5.1.7.jar sqljdbc4....
《HttpClient:网络爬虫的核心工具》 HttpClient,作为Java领域中的一个强大库,是网络爬虫开发中的核心组件。它提供了丰富的API,使得开发者能够高效、灵活地进行HTTP请求的发送与响应的处理,从而实现数据的抓取...
在这个压缩包文件中,包含了两个关键的库:Jsoup和Httpclient,它们是Java爬虫开发中常用的工具。 **Jsoup** 是一个Java库,设计用于处理实际世界的HTML。它提供了非常方便的API,用于提取和操作数据,使用DOM、CSS...
这个“HTTPClient的一个封装”显然指的是对Apache HttpClient库进行了定制化处理,以适应特定项目需求或者简化API使用。下面将详细讨论HttpClient的核心概念、封装的目的以及可能实现的方式。 HttpClient是Apache...
在本文中,我们将深入探讨HttpClient的核心概念、主要功能以及如何使用它来实现网络爬虫。 **HttpClient 主要特点** 1. **异步和同步API**: HttpClient 提供了同步和异步两种API,以适应不同的应用场景。同步API...
在本文中,我们将探讨如何使用 HttpClient 和 HtmlParser 这两个Java库来实现一个简单的网页爬虫。HttpClient 是一个强大的HTTP客户端库,而 HtmlParser 则是一个用于解析HTML文档的高效工具,两者结合可以帮助我们...
基于Apache HttpClient 4.5.2 封装的工具类 HttpUtil 可用于爬虫和模拟登陆。使用新的语法后比3.*版本的速度感觉有提升。使用后注意资源的释放 pom 部分,应该不全,需要用的根据代码的import去找maven资源即可。 ...
在这个场景中,`jsoup` 和 `httpclient` 是两个关键的Java库,它们在构建爬虫时发挥着至关重要的作用。 **jsoup** 是一个强大的Java库,用于处理和解析HTML。它的全称是“Java HTML解析器”,它提供了非常友好的API...
本知识点将详细介绍HTTPClient 4.3在爬虫开发中的应用及其主要组件。 一、HTTPClient 4.3的安装与引入 在Java项目中使用HTTPClient 4.3,首先需要下载相关的jar包。提供的"httpclient43"压缩包应包含所有必需的依赖...