`
lixinye0123
  • 浏览: 333261 次
  • 性别: Icon_minigender_1
  • 来自: 温州
社区版块
存档分类
最新评论

利用HttpClient获取网页内容

    博客分类:
  • Java
阅读更多

HTTP协议是目前互联网上最重要的协议,许多软件与服务都需要依赖HTTP协议。
虽然java.net这个package中包含了对HTTP的基本支持,但还有很多高级和复杂的功能无法实现,这不能不说是一个遗憾。
HttpClient作为Apache的开源项目项目之一,为基于HTTP协议的操作提供了强大的客户端执行支持,最新的版本为3.0RC3。
下面通过一个例子简要展示HttpClient的使用方法:

--------------------------------------------------------------------------------
import java.io.BufferedReader;
import java.io.IOException;

JAVA手机网[www.cnjm.net]
import java.io.InputStream;
import java.io.InputStreamReader;
iimport java.io.UnsupportedEncodingException;

import java.util.*;

import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HostConfiguration;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpConnection;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;

/**
* @author steven
*/
public class HttpClientExample {

//获得ConnectionManager,设置相关参数
private static MultiThreadedHttpConnectionManager manager =
new MultiThreadedHttpConnectionManager();
private static int connectionTimeOut = 20000;
private static int socketTimeOut = 10000;
private static int maxConnectionPerHost = 5;
private static int maxTotalConnections = 40;

//标志初始化是否完成的flag
private static boolean initialed = false;

//初始化ConnectionManger的方法
public static void SetPara() {
manager.getParams().setConnectionTimeout(connectionTimeOut);
manager.getParams().setSoTimeout(socketTimeOut);
manager.getParams()
.setDefaultMaxConnectionsPerHost(maxConnectionPerHost);
manager.getParams().setMaxTotalConnections(maxTotalConnections);
initialed = true;
JAVA手机网[www.cnjm.net]
}

//通过get方法获取网页内容
public static String getGetResponseWithHttpClient(String url, String encode) {
JAVA手机网[www.cnjm.net]
HttpClient client = new HttpClient(manager);

if (initialed) {
JAVA手机网[www.cnjm.net]
HttpClientExample.SetPara();
}

GetMethod get = new GetMethod(url);
get.setFollowRedirects(true);

JAVA手机网[www.cnjm.net]
String result = null;
StringBuffer resultBuffer = new StringBuffer();

try {

client.executeMethod(get);
JAVA手机网[www.cnjm.net]

JAVA手机网[www.cnjm.net]
//在目标页面情况未知的条件下,不推荐使用getResponseBodyAsString()方法
//String strGetResponseBody = post.getResponseBodyAsString();
BufferedReader in = new BufferedReader(
new InputStreamReader(
get.getResponseBodyAsStream(),
get.getResponseCharSet()));

String inputLine = null;

while ((inputLine = in.readLine()) != null) {
resultBuffer.append(inputLine);
JAVA手机网[www.cnjm.net]
resultBuffer.append("\n");
}

in.close();

result = resultBuffer.toString();

//iso-8859-1 is the default reading encode
result = HttpClientExample.ConverterStringCode(resultBuffer.toString(),
get.getResponseCharSet(),
encode);
} catch (Exception e) {
e.printStackTrace();

result = "";
JAVA手机网[www.cnjm.net]
} finally {
get.releaseConnection();

return result;
}
}

public static String getPostResponseWithHttpClient(String url,
String encode) {
HttpClient client = new HttpClient(manager);
JAVA手机网[www.cnjm.net]

if (initialed) {
HttpClientExample.SetPara();
}

JAVA手机网[www.cnjm.net]
PostMethod post = new PostMethod(url);
post.setFollowRedirects(false);

StringBuffer resultBuffer = new StringBuffer();

String result = null;

try {
client.executeMethod(post);

BufferedReader in = new BufferedReader(
JAVA手机网[www.cnjm.net]
new InputStreamReader(
post.getResponseBodyAsStream(),
post.getResponseCharSet()));
String inputLine = null;

JAVA手机网[www.cnjm.net]
while ((inputLine = in.readLine()) != null) {
resultBuffer.append(inputLine);
JAVA手机网[www.cnjm.net]
resultBuffer.append("\n");
}

in.close();

//iso-8859-1 is the default reading encode
result = HttpClientExample.ConverterStringCode(resultBuffer.toString(),
post.getResponseCharSet(),
encode);
} catch (Exception e) {
e.printStackTrace();

result = "";
JAVA手机网[www.cnjm.net]
} finally {
post.releaseConnection();

JAVA手机网[www.cnjm.net]
return result;
}
}

public static String getPostResponseWithHttpClient(String url,
String encode,
NameValuePair[] nameValuePair) {
HttpClient client = new HttpClient(manager);

if (initialed) {
HttpClientExample.SetPara();
}

JAVA手机网[www.cnjm.net]
PostMethod post = new PostMethod(url);
post.setRequestBody(nameValuePair);
post.setFollowRedirects(false);
JAVA手机网[www.cnjm.net]

String result = null;
StringBuffer resultBuffer = new StringBuffer();

try {
client.executeMethod(post);
BufferedReader in = new BufferedReader(
new InputStreamReader(
post.getResponseBodyAsStream(),
post.getResponseCharSet()));
String inputLine = null;

while ((inputLine = in.readLine()) != null) {
JAVA手机网[www.cnjm.net]
resultBuffer.append(inputLine);
resultBuffer.append("\n");
}

in.close();
JAVA手机网[www.cnjm.net]


//iso-8859-1 is the default reading encode
result = HttpClientExample.ConverterStringCode(resultBuffer.toString(),
post.getResponseCharSet(),
encode);
} catch (Exception e) {
e.printStackTrace();

JAVA手机网[www.cnjm.net]
result = "";
} finally {
post.releaseConnection();

return result;
}
}

JAVA手机网[www.cnjm.net]
private static String ConverterStringCode(String source, String srcEncode, String destEncode) {
if (src != null) {
try {
return new String(src.getBytes(srcEncode), destEncode);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "";
}
} else {
return "";
JAVA手机网[www.cnjm.net]
}
}
}

--------------------------------------------------------------------------------
之后,就可以通过下面的代码获得目标网页:
String source = HttpClientExample.getGetResponseWithHttpClient("www.sina.com.cn", "GBK");

注意,在默认情况下,HttpClient的Request的Head中
User-Agent的值是Jakarta Commons-HttpClient 3.0RC1,如果需要改变它(例如,变为Mozilla/4.0),必须在调用之前运行如下语句:
System.getProperties().setProperty("httpclient.useragent", "Mozilla/4.0");


分享到:
评论
1 楼 NASa_CJ 2010-06-20  
String source = HttpClientExample.getGetResponseWithHttpClient("www.sina.com.cn", "GBK");
应该改为:
String source = HttpClientExample.getGetResponseWithHttpClient("http://www.sina.com.cn", "GBK");

相关推荐

    httpClient+jsoup抓取网页数据实例和jar包

    以下是一个简单的示例,展示如何使用HttpClient获取网页内容,然后用Jsoup解析: ```java import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache....

    httpClient+jsoup 抓取网页数据

    - 将HttpClient获取的HTML内容传递给Jsoup的parse方法,得到Document对象。 - 利用Jsoup的CSS选择器和数据提取功能,从Document对象中选取并提取需要的数据。 - 根据需求,可以进一步处理这些数据,如存储到...

    httpClient和htmlparse获取网页数据使用jar

    在IT行业中,获取网页数据是常见的任务之一,用于数据分析、信息抓取或自动化测试等场景。HttpClient和HtmlParser是两个非常实用的Java库,分别用于处理HTTP通信和解析HTML内容。下面将详细介绍这两个库以及如何结合...

    Java爬虫Jsoup+httpclient获取动态生成的数据

    本文主要讲述如何利用Java编程语言中的Jsoup库和HttpClient工具包来获取和解析动态生成的数据,特别是那些通过JavaScript动态加载的数据。 ### Java爬虫基础 Java爬虫是指使用Java语言编写的一类程序,这些程序...

    Android例子源码使用HttpClient获取网页html源代码

    本例子源码展示了如何利用Apache HttpClient库来实现这一功能,同时也对比了另一种常见的网络访问方式——URLConnection。以下是对这两个方法的详细解释。 首先,我们来看`HttpClient`的使用。Apache HttpClient是...

    HttpClient以及获取页面内容应用

    1.6.1发送get请求获取网页内容 HttpClient client = new HttpClient(); //设置代理服务器地址和端口 //client.getHostConfiguration().setProxy("proxy_host_addr",proxy_port); //使用GET方法,如果服务器...

    HttpClient 获取数据

    在实际应用中,HttpClient可以用于获取API数据、网页抓取、自动化测试等多种场景。为了确保数据安全,可能还需要处理HTTPS连接,验证服务器证书,或者使用HTTP基本认证、OAuth等身份验证机制。 总之,HttpClient是...

    httpclient 静态化网站 project

    【标题】"httpclient 静态化网站 project"是一个基于Apache HttpClient库的项目,旨在实现网站内容的抓取和静态化。HttpClient是一个强大的HTTP客户端编程工具包,它允许开发者在Java环境中执行HTTP请求,获取网页...

    httpclient

    1. **数据抓取**:通过发送HTTP请求获取网页内容,然后使用HTML解析库(如Jsoup)解析数据。 2. **登录和cookie管理**:处理登录过程,保存和发送cookie,以便于访问需要登录的页面。 3. **模拟浏览器行为**:设置...

    爬虫:httpclient+jsoup

    - 对于大型网站,可以考虑分布式爬虫设计,利用多台机器并行抓取。 总之,HttpClient和Jsoup是Java爬虫开发中的两个强大工具,它们结合使用能有效地抓取和解析网页信息。理解它们的工作原理和用法,对于构建高效的...

    httpClient需要的jar包

    在Java应用中,HttpClient常用于网页抓取、API调用以及自动化测试等场景。 本压缩包文件"httpClient"很可能包含了HttpClient库所需的必备JAR文件,这些文件通常包括HttpClient的核心库、依赖的第三方库以及可能的...

    Jsoup+httpclient模拟登陆和抓取页面.pdf

    Jsoup+httpclient模拟登陆和抓取页面.pdf

    利用HttpClient和HtmlParser实现的简单爬虫(Java)

    总之,利用HttpClient和HtmlParser(如Jsoup)可以方便地构建一个Java网络爬虫,用于抓取和分析网页信息。在"SearchEngine"项目中,你可以根据需求定制爬虫,实现搜索引擎的功能,高效地获取和处理大量网页数据。

    HttpClient入门陆小马功钟浩.pdf

    在使用HttpClient获取网页内容时,通常会涉及到设置请求方式,例如GET方式,它是最常见的HTTP请求方式之一。通过HttpClient对象可以发送HTTP请求,并接收响应。在处理响应时,可以获取编码信息,设置代理服务器,并...

    HttpClient重新封装的HttpClient类

    在Web开发中,HttpClient常常被用于网页抓取、API调用和其他网络通信任务。本篇文章将深入探讨重新封装的HttpClient类,以及如何利用它进行高效且灵活的网络请求。 首先,我们来看一下`HttpClient`类的基本用法。...

    针对 httpclient4.* 绕验证码获取公司信息 包括 jsoup网页信息的爬虫及htmlUnit对动态网站信息的抓取

    本主题主要关注如何使用`httpclient4.*`库来绕过验证码获取公司信息,以及结合`jsoup`解析静态网页信息和`htmlUnit`处理动态网站的抓取。以下是对这些知识点的详细说明: 1. **httpclient4.***: Apache HttpClient...

    httpclient客户端jar.rar

    在实际应用中,开发者通常会将这三个JAR文件加入到项目类路径中,以利用HttpClient库的功能。例如,通过HttpClient可以创建一个HTTP GET请求来获取网页内容,或者使用POST方法发送JSON或XML数据到服务器。HttpCore则...

    httpclient4.3.5

    《HttpClient 4.3.5:官方...通过了解其核心特性,结合实际案例,开发者可以更高效地利用HttpClient进行网络通信,提升应用的网络性能。在实际开发中,根据项目需求灵活运用这些特性,可以解决各种复杂的HTTP交互问题。

    httpclient-4.5.6.rar

    2. **爬虫程序**:抓取网页内容,进行数据分析。 3. **自动化测试**:模拟用户行为,进行接口测试或系统集成测试。 4. **数据同步**:在分布式系统中,实现节点间的数据同步。 总结,HttpClient 4.5.6 是一个强大且...

    HttpClient4模拟登录回贴

    这篇博客“HttpClient4模拟登录回贴”显然探讨了如何利用HttpClient4库进行网络模拟登录以及在特定网站上发布帖子。HttpClient4适用于各种场景,如自动化测试、数据抓取等,它允许开发者构建复杂的HTTP交互逻辑。 ...

Global site tag (gtag.js) - Google Analytics