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

使用 Apache HttpClient 工具模拟百度蜘蛛或浏览器抓取和解压gzip网页

阅读更多

 

package httpclient;

 

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.util.zip.GZIPInputStream;

 

import org.apache.commons.httpclient.HttpClient;

import org.apache.commons.httpclient.HttpException;

import org.apache.commons.httpclient.methods.GetMethod;

/**

 * 使用 Apache HttpClient 工具模拟百度蜘蛛或浏览器抓取和解压gzip网页

 * @author Ivan

 *

 */

 

public class HttpClientTest {

 

/**

* @param args

* @throws IOException

* @throws HttpException

*/

public static void main(String[] args) throws HttpException, IOException {

 

HttpClient httpclient = new HttpClient();// 创建一个客户端,类似打开一个浏览器

// httpclient.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);

// httpclient.getParams().setParameter("http.protocol.single-cookie-header",true);

 

GetMethod getMethod = new GetMethod("http://www.iteye.com");//http://itindex.net

 

// google

// getMethod.setRequestHeader("Host", "laohuang.iteye.com");

// getMethod.setRequestHeader("Connection", "Keep-Alive");

// getMethod.setRequestHeader("Accept", "*/*");

// getMethod.setRequestHeader("From", "goolebot@googlebot.com");

// getMethod.setRequestHeader("User-Agent",

// "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)");

// getMethod.setRequestHeader("Accept-Encoding", "gzip, deflate");

 

// baidu

getMethod.setRequestHeader("Host", " www.iteye .com");//itindex.net

getMethod.setRequestHeader("Connection", "Keep-Alive");

getMethod.setRequestHeader("Accept", "*/*");

getMethod.setRequestHeader("From", "goolebot@googlebot.com");

getMethod

.setRequestHeader(

"User-Agent",

"Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)");

getMethod.setRequestHeader("Accept-Encoding", "gzip");

 

 

int statusCode = httpclient.executeMethod(getMethod);

 

 

System.out.println(getMethod.getResponseCharSet());

System.out.println(getMethod.getResponseHeader("Content-Encoding"));

System.out.println(getBodyAsString(getMethod,getMethod.getResponseCharSet()));

 

 

 

}

 

public static String getBodyAsString(GetMethod getHC, String charset)

throws IOException {

String acceptEncoding = "";

if (getHC.getResponseHeader("Content-Encoding") != null)

acceptEncoding = getHC.getResponseHeader("Content-Encoding")

.getValue();

StringBuffer sb = new StringBuffer();

 

if (acceptEncoding.toLowerCase().indexOf("gzip") > -1) {

// 建立gzip解压工作流

InputStream is = getHC.getResponseBodyAsStream();

GZIPInputStream gzin = new GZIPInputStream(is);

InputStreamReader isr = new InputStreamReader(gzin, charset); // 设置读取流的编码格式,自定义编码

java.io.BufferedReader br = new java.io.BufferedReader(isr);

String tempbf;

while ((tempbf = br.readLine()) != null) {

sb.append(tempbf);

sb.append("\r\n");

}

isr.close();

gzin.close();

} else {

InputStreamReader isr = new InputStreamReader(getHC

.getResponseBodyAsStream(), charset); // 设置读取流的编码格式,自定义编码

java.io.BufferedReader br = new java.io.BufferedReader(isr);

String tempbf;

while ((tempbf = br.readLine()) != null) {

sb.append(tempbf);

sb.append("\r\n");

}

isr.close();

}

getHC.abort();

getHC.releaseConnection();

return sb.toString();

}

 

}

 

Via http://itindex.net

0
1
分享到:
评论

相关推荐

    httpclient jar包.zip

    在实际开发中,这些jar包组合使用可以构建出功能强大的HTTP客户端应用,无论是在简单的网页抓取,还是复杂的Web服务交互,都能提供强大的支持。正确理解和使用这些组件,能够帮助开发者更高效地与HTTP服务器进行通信...

    网络蜘蛛程序及java源码

    网络蜘蛛程序,也被称为网页爬虫或网络抓取工具,是用于自动遍历互联网并抓取网页内容的软件。在IT行业中,它们扮演着至关重要的角色,尤其在数据分析、搜索引擎优化(SEO)以及大规模信息采集等领域。Java作为一门...

    httpcomponents-client-4.2-alpha1-osgi-bin.tar.gz

    这个压缩包文件采用tar.gz格式,是一种在Linux/Unix系统中常用的归档和压缩方法,它首先使用tar工具将多个文件和目录打包成一个单一的文件,然后使用gzip工具进行压缩,以减少存储空间。 Apache HttpClient 是一个...

    java抓取网页源码gzip-phproxy:PHP中的代理

    Java的HttpURLConnection或HttpClient库可以自动处理GZIP解压,但有时需要手动配置。 ```java URL url = new URL("http://example.com"); HttpURLConnection connection = (HttpURLConnection) url.openConnection...

    完整版网页访问模块.rar

    3. **网络库**:实现网页访问模块通常需要借助网络库,如Python的`requests`库,Java的`HttpURLConnection`或`Apache HttpClient`,JavaScript的`fetch`或`axios`。这些库提供了方便的接口,用于构造和发送HTTP请求...

    httpcore-4.1.2.jar 等

    在Java开发领域,HTTP通信是不可或缺的一部分,尤其是在网络爬虫技术中。本文将详细探讨`httpcore-4.1.2.jar`这一核心库及其相关的组件,...在爬虫开发中,这些组件可以帮助开发者高效、稳定地抓取和处理网络数据。

    java操作网络数据包 论文

    例如,jpcap库可以用于数据包捕获,Apache HttpClient库可以辅助解析HTTP头部和主体,而Java标准库中的Inflater类则用于处理数据解压。此外,还可以使用第三方库如OkHttp或HttpURLConnection来发送和接收HTTP请求,...

    httpcomponents-core-4.4.12-bin.zip

    总之,Apache HttpComponents Core 4.4.12是Java开发中不可或缺的工具,它为构建高质量、高性能的网络应用提供了坚实的基础。无论是简单的网页抓取,还是复杂的RESTful API调用,甚至是WebSocket通信,...

    java org.apache.http.nio jar包

    这个库是Java开发者在处理大量并发网络请求时的一个强大工具,尤其是在服务器端应用中,因为它可以高效地利用系统资源并减少线程消耗。 在Java中,传统的I/O模型是阻塞的,即一个线程在等待数据读取或写入时会被...

    Microbot:一个简单的JAVA机器人,可以通过许多配置(匿名性,用户代理,在请求之前等待,自动压缩等)来获取Web资源。 当您想从网站上获取信息时主要有用

    此外,Microbot可能还利用了第三方库如Apache HttpClient或OkHttp,以提供更高级的网络请求功能。 3. **配置选项**: - **匿名性**:Microbot可以配置为匿名模式,避免在请求中暴露用户的身份信息,这可能是通过...

    httpcomponents-client-4.2.5-bin

    - `NOTICE`和`LICENSE`文件:包含了版权和许可信息,使用这些库必须遵循Apache 2.0开源协议。 - `README.txt`:简要介绍了库的用途和使用方法,是快速入门的指南。 四、实例应用 下面是一个简单的使用...

    http-components-core-4.1-bin.zip

    2. **传输编码**:支持 chunked transfer coding 和 gzip compression,这些编码方式可以处理大体积的数据传输,避免了数据大小未知时的缓冲问题,并且可以提高传输效率。 3. **HTTP方法支持**:包括GET、POST、PUT...

Global site tag (gtag.js) - Google Analytics