- 浏览: 80284 次
- 性别:
- 来自: 北京
文章分类
最新评论
HttpClient 下载网络资源
所需commons-httpclient-3.0.1.jar及其依赖包
package cn.test.softcrawltool.utils.net;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import cn.yicha.softcrawltool.utils.CommonUtils;
import static cn.test.softcrawltool.utils.consts.SoftCrawlConst.*;
/**
* 功能: 软件资源下载
*
* @author liaoyq
*
*/
public class DownloadUtil {
private static final Logger LOG = Logger.getLogger(DownloadUtil.class);
private static final int BUFFER_SIZE = 10240; //10K
public static boolean downloadBinaryResource(String url, String referer, String rootpath) {
File rootDir = CommonUtils.createFileDirectory(rootpath);
HttpClient httpClient = getHttpClient();
GetMethod getMethod = getMethod(url, referer);
InputStream in = null;
DataOutputStream dos = null;
try {
int statusCode = httpClient.executeMethod(getMethod);
if (statusCode == HttpStatus.SC_OK) {
String newurl = getMethod.getResponseHeader("Content-Location").getValue();
String filename = getFilename(newurl);
in = getMethod.getResponseBodyAsStream();
if (in != null) {
dos = new DataOutputStream(new FileOutputStream(new File(rootDir, filename)));
byte[] buffer = new byte[BUFFER_SIZE];
int bytes = 0;
while ((bytes = in.read(buffer)) != -1)
dos.write(buffer, 0, bytes);
return true;
}
} else {
LOG.error("Method failed: " + getMethod.getStatusLine());
}
} catch (Exception e) {
LOG.error("download soft resource failed!" + url, e);
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
}
}
if (dos != null) {
try {
dos.close();
} catch (IOException e) {
}
}
getMethod.releaseConnection();
}
return false;
}
public static String downloadPage(String url, String pageEncoding) {
StringBuffer content = new StringBuffer(10240);
HttpClient httpClient = getHttpClient();
GetMethod getMethod = getMethod(url, null);
InputStream in = null;
try {
int statusCode = httpClient.executeMethod(getMethod);
if (statusCode == HttpStatus.SC_OK) {
in = getMethod.getResponseBodyAsStream();
if (in != null) {
BufferedReader br = new BufferedReader(new InputStreamReader(in, pageEncoding));
String line = null;
while ((line = br.readLine()) != null) {
content.append(line + "\n");
}
return content.toString();
}
}
} catch (Exception e) {
LOG.error("download page content failed!" + url, e);
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
}
}
getMethod.releaseConnection();
}
return null;
}
private static HttpClient getHttpClient() {
MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
HttpClient httpClient = new HttpClient(connectionManager);
httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(
ConnectionTimeout);
httpClient.getHttpConnectionManager().getParams().setSoTimeout(
SoTimeout);
return httpClient;
}
private static GetMethod getMethod(String url, String refererUrl) {
GetMethod getMethod = new GetMethod(url);
getMethod.setFollowRedirects(true);// 自动重定向
if (!StringUtils.isEmpty(refererUrl))
getMethod.setRequestHeader(Referer, refererUrl);// 解决不能下载问题
getMethod.getParams().setCookiePolicy(CookiePolicy.IGNORE_COOKIES);
getMethod.setRequestHeader(COOKIE, COOKIE_VALUE);
getMethod.setRequestHeader(USER_AGENT, USER_AGENT_VALUE);
getMethod.setRequestHeader(Connection, Connection_VALUE);
return getMethod;
}
private static String getFilename(String url) {
return url.substring(url.lastIndexOf("/") + 1);
}
}
所需commons-httpclient-3.0.1.jar及其依赖包
package cn.test.softcrawltool.utils.net;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import cn.yicha.softcrawltool.utils.CommonUtils;
import static cn.test.softcrawltool.utils.consts.SoftCrawlConst.*;
/**
* 功能: 软件资源下载
*
* @author liaoyq
*
*/
public class DownloadUtil {
private static final Logger LOG = Logger.getLogger(DownloadUtil.class);
private static final int BUFFER_SIZE = 10240; //10K
public static boolean downloadBinaryResource(String url, String referer, String rootpath) {
File rootDir = CommonUtils.createFileDirectory(rootpath);
HttpClient httpClient = getHttpClient();
GetMethod getMethod = getMethod(url, referer);
InputStream in = null;
DataOutputStream dos = null;
try {
int statusCode = httpClient.executeMethod(getMethod);
if (statusCode == HttpStatus.SC_OK) {
String newurl = getMethod.getResponseHeader("Content-Location").getValue();
String filename = getFilename(newurl);
in = getMethod.getResponseBodyAsStream();
if (in != null) {
dos = new DataOutputStream(new FileOutputStream(new File(rootDir, filename)));
byte[] buffer = new byte[BUFFER_SIZE];
int bytes = 0;
while ((bytes = in.read(buffer)) != -1)
dos.write(buffer, 0, bytes);
return true;
}
} else {
LOG.error("Method failed: " + getMethod.getStatusLine());
}
} catch (Exception e) {
LOG.error("download soft resource failed!" + url, e);
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
}
}
if (dos != null) {
try {
dos.close();
} catch (IOException e) {
}
}
getMethod.releaseConnection();
}
return false;
}
public static String downloadPage(String url, String pageEncoding) {
StringBuffer content = new StringBuffer(10240);
HttpClient httpClient = getHttpClient();
GetMethod getMethod = getMethod(url, null);
InputStream in = null;
try {
int statusCode = httpClient.executeMethod(getMethod);
if (statusCode == HttpStatus.SC_OK) {
in = getMethod.getResponseBodyAsStream();
if (in != null) {
BufferedReader br = new BufferedReader(new InputStreamReader(in, pageEncoding));
String line = null;
while ((line = br.readLine()) != null) {
content.append(line + "\n");
}
return content.toString();
}
}
} catch (Exception e) {
LOG.error("download page content failed!" + url, e);
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
}
}
getMethod.releaseConnection();
}
return null;
}
private static HttpClient getHttpClient() {
MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
HttpClient httpClient = new HttpClient(connectionManager);
httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(
ConnectionTimeout);
httpClient.getHttpConnectionManager().getParams().setSoTimeout(
SoTimeout);
return httpClient;
}
private static GetMethod getMethod(String url, String refererUrl) {
GetMethod getMethod = new GetMethod(url);
getMethod.setFollowRedirects(true);// 自动重定向
if (!StringUtils.isEmpty(refererUrl))
getMethod.setRequestHeader(Referer, refererUrl);// 解决不能下载问题
getMethod.getParams().setCookiePolicy(CookiePolicy.IGNORE_COOKIES);
getMethod.setRequestHeader(COOKIE, COOKIE_VALUE);
getMethod.setRequestHeader(USER_AGENT, USER_AGENT_VALUE);
getMethod.setRequestHeader(Connection, Connection_VALUE);
return getMethod;
}
private static String getFilename(String url) {
return url.substring(url.lastIndexOf("/") + 1);
}
}
发表评论
-
toString 方法
2014-11-06 14:28 346@Override public String to ... -
Java 反射研究Demo
2013-10-16 14:27 982需要JDom.jar package test; ... -
[转]Android开发者必须深入学习的10个应用开源项目
2010-10-15 15:33 664http://hailinhe1986-163-com.ite ... -
Android Intent的几种用法全面总结
2010-10-15 15:31 699http://vvsongsunny.iteye.com/bl ... -
Android读取txt的方法
2010-10-15 15:26 14931、放入到资源文件夹里面,也就是所创建android工程的re ... -
Android中Intent的用法总结
2010-10-14 22:35 0http://jobenc.iteye.com/blog/71 ... -
android
2010-10-14 14:48 0虽然Smack在PC上可以工作得很好,功能也很强大,但在OPh ... -
android
2010-10-08 11:09 0http://androidappdocs-staging.a ... -
mysql group_concat用法
2010-09-30 13:46 974http://blog.sina.com.cn/s/blog_ ... -
注意设置httpclient连接数
2010-06-29 00:15 3216http://blog.csdn.net/lovingprin ... -
Javascript 基本操作
2010-04-17 10:44 7011:Div的隐藏与显示 <script type=&q ... -
判断形如((()))的字符串格式是否正确
2010-04-13 19:35 725对于判断字符串格式的这一类问题,解决办法由很多,最先想到得方法 ... -
MyEclipse继承属性编辑器
2010-03-18 19:35 1323在MyEclipse下添加属性编辑器: 在Eclipse的He ... -
判断是否为素数
2010-03-14 09:07 1060判断一个数是否为素数,方法很简单,实现如下: /* ... -
Byte,Short,Integer以及Long对象在不同数值范围内的比较情况总结
2010-03-14 08:50 3677在Java语言中,整型对象在不同数值范围内的比较分两种情况: ...
相关推荐
### HttpClient 实现文件下载 #### 一、简介与原理 在Java开发中,经常会遇到需要通过HTTP协议来获取网络资源的需求,例如从Web服务器下载文件。Apache HttpClient 是一个用于发送HTTP请求的Java类库,它提供了...
7. **释放资源**:最后,记得关闭输入流和释放HttpClient资源。 ```java inputStream.close(); getMethod.releaseConnection(); ``` 在实际应用中,我们可能需要处理更复杂的情况,比如分块下载、断点续传、多...
请求完成后,记得释放HTTPClient资源,防止内存泄漏: ```cpp http.end(); ``` 9. **应用示例**: ESP8266HTTPClient常用于物联网项目,如通过HTTP API控制智能家居设备、从云服务器获取配置信息、或者将...
本篇文章将深入探讨如何使用HTTPClient进行多线程分段下载的实践。 首先,我们要理解多线程下载的基本原理。多线程下载是通过将大文件分割成多个小段,每个线程负责下载一个或多个段,这样可以充分利用多核处理器的...
标题中的“jsoup httpclient 爬取网页并下载google图标”揭示了这个项目或教程是关于使用Java的两个著名库——Jsoup和HttpClient,来实现网页抓取并下载特定资源,这里是Google的图标。Jsoup是一个用于处理实际世界...
本篇文章将深入探讨如何使用`HttpClient`来获取网络资源,以及处理返回的XML数据。 首先,我们需要了解`HttpClient`的基本用法。在Java中,创建一个`HttpClient`实例是获取网络资源的第一步。`HttpClient`提供了...
- 关闭HttpClient实例以释放资源,防止内存泄漏。 - 如果文件较大,考虑使用`StreamingEntity`或分块读写,以避免一次性加载整个响应内容导致内存溢出。 6. **DownloadData文件**: 压缩包中的`DownloadData`...
HttpClient提供了一种便捷的方式来下载文件: 1. **创建HttpGet请求**:指定要下载文件的URL。 2. **执行请求**:发送请求并获取`HttpResponse`。 3. **准备输出流**:创建一个本地文件,并用`FileOutputStream`...
在标题"org.apache.commons.httpclient相关资源包"中,我们可以看出这是关于使用Apache HttpClient进行HTTP通信的知识点。Apache HttpClient库是Apache软件基金会的一个项目,它提供了对HTTP协议的全面支持,包括GET...
在本篇讨论中,我们将深入理解如何使用HttpClient来实现远程文件下载。 首先,我们需要导入必要的依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>commons-httpclient ...
在Java开发中,HTTPClient和RESTful风格的接口被广泛用于实现文件的上传与下载功能。HTTPClient是一个强大的HTTP客户端库,而RESTful是一种轻量级的、基于HTTP协议的软件架构风格,常用于构建Web服务。在分布式系统...
1. **实例化 HttpClient 对象**:首先,你需要创建一个 `HttpClient` 类的实例,例如 `HttpClient client;` 2. **设置服务器信息**:调用 `client.begin()` 函数,传入你要访问的服务器地址和端口号,如 `client....
本篇文章将详细介绍如何使用Java的HttpClient实现异步请求资源。 首先,让我们了解什么是异步请求。在同步请求中,调用一个API或发送一个HTTP请求后,程序会等待响应返回,然后继续执行后续代码。而异步请求则不同...
2. **连接管理**:HttpClient包含一个连接管理器,用于控制到服务器的连接,包括连接池的创建、管理和复用,有助于提高性能和资源利用率。 3. **请求和响应处理**:HttpClient可以设置请求头、参数、编码方式等,并...
此外,正确管理和关闭HttpClient实例以及响应实体非常重要,以防止资源泄漏。 总之,httpclient.jar作为JAVA扩展组件,是Java开发者进行HTTP通信的强大工具。通过理解其核心功能、API使用和最佳实践,我们可以更...
此资源包"HttpClient4.5.3"提供了HttpClient的版本4.5.3,这是一个稳定且功能丰富的版本,具有诸多改进和修复。 1. **HttpClient 4.5.3 源码分析**: - **模块化设计**:HttpClient 4.5.3采用了模块化设计,使得...
- URI(Uniform Resource Identifier)是资源的唯一标识,上传和下载时,只需要改变`HttpPost`或`HttpGet`对象的URI即可指向不同的服务器地址。 - 如果需要动态修改URI,可以使用字符串操作函数,如替换或拼接,...
- **创建HttpClient实例**:使用`HttpClientBuilder`构建器创建HttpClient对象,可以配置连接池大小、超时等参数。 - **构建HttpGet/HttpPost请求**:通过`HttpGet`或`HttpPost`构造HTTP请求,设置URL、方法和请求...
这个JAR包下载通常用于构建网络通信功能,尤其是在进行Web服务调用、网页抓取或者API接口测试时非常有用。 在Java中,HTTPClient库提供了多种类和接口,例如`CloseableHttpClient`用于创建HTTP客户端实例,`...
最后,别忘了关闭HttpClient实例以释放资源。 在实际应用中,HttpClient还支持其他高级特性,比如重试策略、连接池管理、超时设置、Cookie管理等。这使得HttpClient成为Java开发中进行HTTP通信的首选工具之一,尤其...