`

Httpclient 下载资源

阅读更多
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);
}
}
分享到:
评论

相关推荐

    HttpClient实现文件下载

    ### HttpClient 实现文件下载 #### 一、简介与原理 在Java开发中,经常会遇到需要通过HTTP协议来获取网络资源的需求,例如从Web服务器下载文件。Apache HttpClient 是一个用于发送HTTP请求的Java类库,它提供了...

    通过 HttpClient 下载 文件

    7. **释放资源**:最后,记得关闭输入流和释放HttpClient资源。 ```java inputStream.close(); getMethod.releaseConnection(); ``` 在实际应用中,我们可能需要处理更复杂的情况,比如分块下载、断点续传、多...

    ESP8266HTTPClient.zip

    请求完成后,记得释放HTTPClient资源,防止内存泄漏: ```cpp http.end(); ``` 9. **应用示例**: ESP8266HTTPClient常用于物联网项目,如通过HTTP API控制智能家居设备、从云服务器获取配置信息、或者将...

    httpclient多线程下载(分段下载)实践

    本篇文章将深入探讨如何使用HTTPClient进行多线程分段下载的实践。 首先,我们要理解多线程下载的基本原理。多线程下载是通过将大文件分割成多个小段,每个线程负责下载一个或多个段,这样可以充分利用多核处理器的...

    jsoup httpclient 爬取网页并下载google图标

    标题中的“jsoup httpclient 爬取网页并下载google图标”揭示了这个项目或教程是关于使用Java的两个著名库——Jsoup和HttpClient,来实现网页抓取并下载特定资源,这里是Google的图标。Jsoup是一个用于处理实际世界...

    通过HTTPClient获取网络资源

    本篇文章将深入探讨如何使用`HttpClient`来获取网络资源,以及处理返回的XML数据。 首先,我们需要了解`HttpClient`的基本用法。在Java中,创建一个`HttpClient`实例是获取网络资源的第一步。`HttpClient`提供了...

    java使用HttpClient通过url下载文件到本地

    - 关闭HttpClient实例以释放资源,防止内存泄漏。 - 如果文件较大,考虑使用`StreamingEntity`或分块读写,以避免一次性加载整个响应内容导致内存溢出。 6. **DownloadData文件**: 压缩包中的`DownloadData`...

    HttpClient实现POST GET和文件下载

    HttpClient提供了一种便捷的方式来下载文件: 1. **创建HttpGet请求**:指定要下载文件的URL。 2. **执行请求**:发送请求并获取`HttpResponse`。 3. **准备输出流**:创建一个本地文件,并用`FileOutputStream`...

    org.apache.commons.httpclient相关资源包

    在标题"org.apache.commons.httpclient相关资源包"中,我们可以看出这是关于使用Apache HttpClient进行HTTP通信的知识点。Apache HttpClient库是Apache软件基金会的一个项目,它提供了对HTTP协议的全面支持,包括GET...

    org.apache.commons.httpclient 远程下载文件

    在本篇讨论中,我们将深入理解如何使用HttpClient来实现远程文件下载。 首先,我们需要导入必要的依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>commons-httpclient ...

    httpclient和RestfuL风格上传下载文件

    在Java开发中,HTTPClient和RESTful风格的接口被广泛用于实现文件的上传与下载功能。HTTPClient是一个强大的HTTP客户端库,而RESTful是一种轻量级的、基于HTTP协议的软件架构风格,常用于构建Web服务。在分布式系统...

    Arduino HttpClient 库文件

    1. **实例化 HttpClient 对象**:首先,你需要创建一个 `HttpClient` 类的实例,例如 `HttpClient client;` 2. **设置服务器信息**:调用 `client.begin()` 函数,传入你要访问的服务器地址和端口号,如 `client....

    java实现HttpClient异步请求资源的方法

    本篇文章将详细介绍如何使用Java的HttpClient实现异步请求资源。 首先,让我们了解什么是异步请求。在同步请求中,调用一个API或发送一个HTTP请求后,程序会等待响应返回,然后继续执行后续代码。而异步请求则不同...

    commons-httpclient.rar

    2. **连接管理**:HttpClient包含一个连接管理器,用于控制到服务器的连接,包括连接池的创建、管理和复用,有助于提高性能和资源利用率。 3. **请求和响应处理**:HttpClient可以设置请求头、参数、编码方式等,并...

    httpclient.jar 文件下载

    此外,正确管理和关闭HttpClient实例以及响应实体非常重要,以防止资源泄漏。 总之,httpclient.jar作为JAVA扩展组件,是Java开发者进行HTTP通信的强大工具。通过理解其核心功能、API使用和最佳实践,我们可以更...

    HttpClient4.5.3资源

    此资源包"HttpClient4.5.3"提供了HttpClient的版本4.5.3,这是一个稳定且功能丰富的版本,具有诸多改进和修复。 1. **HttpClient 4.5.3 源码分析**: - **模块化设计**:HttpClient 4.5.3采用了模块化设计,使得...

    httpClient post 上传 下载 图片

    - URI(Uniform Resource Identifier)是资源的唯一标识,上传和下载时,只需要改变`HttpPost`或`HttpGet`对象的URI即可指向不同的服务器地址。 - 如果需要动态修改URI,可以使用字符串操作函数,如替换或拼接,...

    httpclient-4.5.2.jar.zip

    - **创建HttpClient实例**:使用`HttpClientBuilder`构建器创建HttpClient对象,可以配置连接池大小、超时等参数。 - **构建HttpGet/HttpPost请求**:通过`HttpGet`或`HttpPost`构造HTTP请求,设置URL、方法和请求...

    httpclient JAR包下载

    这个JAR包下载通常用于构建网络通信功能,尤其是在进行Web服务调用、网页抓取或者API接口测试时非常有用。 在Java中,HTTPClient库提供了多种类和接口,例如`CloseableHttpClient`用于创建HTTP客户端实例,`...

    httpClient

    最后,别忘了关闭HttpClient实例以释放资源。 在实际应用中,HttpClient还支持其他高级特性,比如重试策略、连接池管理、超时设置、Cookie管理等。这使得HttpClient成为Java开发中进行HTTP通信的首选工具之一,尤其...

Global site tag (gtag.js) - Google Analytics