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
分享到:
相关推荐
在实际开发中,这些jar包组合使用可以构建出功能强大的HTTP客户端应用,无论是在简单的网页抓取,还是复杂的Web服务交互,都能提供强大的支持。正确理解和使用这些组件,能够帮助开发者更高效地与HTTP服务器进行通信...
网络蜘蛛程序,也被称为网页爬虫或网络抓取工具,是用于自动遍历互联网并抓取网页内容的软件。在IT行业中,它们扮演着至关重要的角色,尤其在数据分析、搜索引擎优化(SEO)以及大规模信息采集等领域。Java作为一门...
这个压缩包文件采用tar.gz格式,是一种在Linux/Unix系统中常用的归档和压缩方法,它首先使用tar工具将多个文件和目录打包成一个单一的文件,然后使用gzip工具进行压缩,以减少存储空间。 Apache HttpClient 是一个...
Java的HttpURLConnection或HttpClient库可以自动处理GZIP解压,但有时需要手动配置。 ```java URL url = new URL("http://example.com"); HttpURLConnection connection = (HttpURLConnection) url.openConnection...
3. **网络库**:实现网页访问模块通常需要借助网络库,如Python的`requests`库,Java的`HttpURLConnection`或`Apache HttpClient`,JavaScript的`fetch`或`axios`。这些库提供了方便的接口,用于构造和发送HTTP请求...
在Java开发领域,HTTP通信是不可或缺的一部分,尤其是在网络爬虫技术中。本文将详细探讨`httpcore-4.1.2.jar`这一核心库及其相关的组件,...在爬虫开发中,这些组件可以帮助开发者高效、稳定地抓取和处理网络数据。
例如,jpcap库可以用于数据包捕获,Apache HttpClient库可以辅助解析HTTP头部和主体,而Java标准库中的Inflater类则用于处理数据解压。此外,还可以使用第三方库如OkHttp或HttpURLConnection来发送和接收HTTP请求,...
总之,Apache HttpComponents Core 4.4.12是Java开发中不可或缺的工具,它为构建高质量、高性能的网络应用提供了坚实的基础。无论是简单的网页抓取,还是复杂的RESTful API调用,甚至是WebSocket通信,...
这个库是Java开发者在处理大量并发网络请求时的一个强大工具,尤其是在服务器端应用中,因为它可以高效地利用系统资源并减少线程消耗。 在Java中,传统的I/O模型是阻塞的,即一个线程在等待数据读取或写入时会被...
此外,Microbot可能还利用了第三方库如Apache HttpClient或OkHttp,以提供更高级的网络请求功能。 3. **配置选项**: - **匿名性**:Microbot可以配置为匿名模式,避免在请求中暴露用户的身份信息,这可能是通过...
- `NOTICE`和`LICENSE`文件:包含了版权和许可信息,使用这些库必须遵循Apache 2.0开源协议。 - `README.txt`:简要介绍了库的用途和使用方法,是快速入门的指南。 四、实例应用 下面是一个简单的使用...
2. **传输编码**:支持 chunked transfer coding 和 gzip compression,这些编码方式可以处理大体积的数据传输,避免了数据大小未知时的缓冲问题,并且可以提高传输效率。 3. **HTTP方法支持**:包括GET、POST、PUT...