import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.commons.io.IOUtils;
public class HttpClientUtil {
public static HttpClient getHttpClient(){
// 创建客户端
HttpClient client = new DefaultHttpClient();
return client;
}
/**
* 通过url加载字符串
* @author:qiuchen
* @createTime:2012-7-9
* @param url
* @return
*/
public static String get(String url) {
String messageStr = null;
// 创建HttpClient实例
HttpClient httpClient = getHttpClient();
// Http Get 请求
HttpGet get = new HttpGet(url);
// 获得服务器响应的所有信息
HttpResponse response = null;
try {
response = httpClient.execute(get);
int state = response.getStatusLine().getStatusCode();
if(state == HttpStatus.SC_OK){ //状态码=200
// 获得服务器响应的信息(除head部分,源代码中是看不到的)
HttpEntity entity = response.getEntity();
//获取输入流
InputStream input = entity.getContent();
// 缓冲读取器
BufferedReader reader = new BufferedReader(new InputStreamReader(input,"utf-8"));
StringBuffer sb = new StringBuffer();
String line = null;
while((line=reader.readLine()) != null) {
sb.append(line);
}
reader.close();
input.close();
messageStr = sb.toString();
}else{
System.out.println("load json music error");
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
if(httpClient != null){
httpClient.getConnectionManager().shutdown();
}
}
return messageStr;
}
/**
* 通过url下载数据到本地文件
* @author:qiuchen
* @createTime:2012-7-9
* @param url
* @return
*/
public static boolean download(String url){
//创建客户端
HttpClient httpClient = getHttpClient();
//文件下载路径
String savePath = "f:/data.txt";
// Http Get 请求
HttpGet get = new HttpGet(url);
// 获得服务器响应的所有信息
HttpResponse response = null;
try {
response = httpClient.execute(get);
//状态码
int state = response.getStatusLine().getStatusCode();
System.out.println(state);
if(state == HttpStatus.SC_OK){ //状态码=200
// 获得服务器响应的信息(除head部分,源代码中是看不到的)
HttpEntity entity = response.getEntity();
System.out.println("fileLength:"+entity.getContentLength());
System.out.println(entity);
//获取输入流
InputStream input = entity.getContent();
//定义输出文件(文件格式要和资源匹配)
FileOutputStream bout = new FileOutputStream(savePath);
//COPY
IOUtils.copy(input, bout);
input.close(); // 关闭输入流
bout.close(); //关闭输出流
System.out.println("download success");
}else{
System.out.println("read error");
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
if(httpClient != null){
httpClient.getConnectionManager().shutdown();
}
}
return true;
}
}
分享到:
相关推荐
- `httpmime-4.0.1.jar`: 这个库扩展了HttpClient,支持MIME类型,使得上传和下载文件变得简单。 3. **创建HttpClient实例** 在Android中,首先需要初始化一个HttpClient实例,这通常通过`HttpClientBuilder`或`...
本篇文章将深入探讨如何使用HTTPClient进行多线程分段下载的实践。 首先,我们要理解多线程下载的基本原理。多线程下载是通过将大文件分割成多个小段,每个线程负责下载一个或多个段,这样可以充分利用多核处理器的...
### HttpClient 实现文件下载 #### 一、简介与原理 在Java开发中,经常会遇到需要通过HTTP协议来获取网络资源的需求,例如从Web服务器下载文件。Apache HttpClient 是一个用于发送HTTP请求的Java类库,它提供了...
在本篇讨论中,我们将深入理解如何使用HttpClient来实现远程文件下载。 首先,我们需要导入必要的依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>commons-httpclient ...
请求完成后,记得释放HTTPClient资源,防止内存泄漏: ```cpp http.end(); ``` 9. **应用示例**: ESP8266HTTPClient常用于物联网项目,如通过HTTP API控制智能家居设备、从云服务器获取配置信息、或者将...
这个资源包,"org.apache.commons.httpclient资源包(4.2)",是该库的一个特定版本,即4.2版,提供了对HTTP协议的强大支持,使开发者能够方便地与Web服务器进行交互。 在HttpClient 4.2中,有几个关键知识点值得...
在使用HTTPClient和HTTPCore时,需要注意的是,这两个库都需要正确配置连接管理,以确保有效利用系统资源,避免过多的并发连接导致的问题。此外,对于安全性要求较高的应用,应考虑使用SSL/TLS加密,设置信任的证书...
- 关闭HttpClient实例以释放资源,防止内存泄漏。 - 如果文件较大,考虑使用`StreamingEntity`或分块读写,以避免一次性加载整个响应内容导致内存溢出。 6. **DownloadData文件**: 压缩包中的`DownloadData`...
HttpClient提供了一种便捷的方式来下载文件: 1. **创建HttpGet请求**:指定要下载文件的URL。 2. **执行请求**:发送请求并获取`HttpResponse`。 3. **准备输出流**:创建一个本地文件,并用`FileOutputStream`...
7. **释放资源**:最后,记得关闭输入流和释放HttpClient资源。 ```java inputStream.close(); getMethod.releaseConnection(); ``` 在实际应用中,我们可能需要处理更复杂的情况,比如分块下载、断点续传、多...
2. **连接管理**:HttpClient包含一个连接管理器,用于控制到服务器的连接,包括连接池的创建、管理和复用,有助于提高性能和资源利用率。 3. **请求和响应处理**:HttpClient可以设置请求头、参数、编码方式等,并...
本篇文章将深入探讨如何使用`HttpClient`来获取网络资源,以及处理返回的XML数据。 首先,我们需要了解`HttpClient`的基本用法。在Java中,创建一个`HttpClient`实例是获取网络资源的第一步。`HttpClient`提供了...
此外,正确管理和关闭HttpClient实例以及响应实体非常重要,以防止资源泄漏。 总之,httpclient.jar作为JAVA扩展组件,是Java开发者进行HTTP通信的强大工具。通过理解其核心功能、API使用和最佳实践,我们可以更...
在Java开发中,HTTPClient和RESTful风格的接口被广泛用于实现文件的上传与下载功能。HTTPClient是一个强大的HTTP客户端库,而RESTful是一种轻量级的、基于HTTP协议的软件架构风格,常用于构建Web服务。在分布式系统...
- 配置合适的连接池大小,以平衡资源利用和性能。 - 正确处理异常,避免程序因为网络问题而中断。 - 使用最新的HttpClient版本,以获取最新的安全修复和功能改进。 总之,HttpClient-4.3.6是Java开发者进行HTTP通信...
1. **实例化 HttpClient 对象**:首先,你需要创建一个 `HttpClient` 类的实例,例如 `HttpClient client;` 2. **设置服务器信息**:调用 `client.begin()` 函数,传入你要访问的服务器地址和端口号,如 `client....
- **创建HttpClient实例**:使用`HttpClientBuilder`构建器创建HttpClient对象,可以配置连接池大小、超时等参数。 - **构建HttpGet/HttpPost请求**:通过`HttpGet`或`HttpPost`构造HTTP请求,设置URL、方法和请求...
这个JAR包下载通常用于构建网络通信功能,尤其是在进行Web服务调用、网页抓取或者API接口测试时非常有用。 在Java中,HTTPClient库提供了多种类和接口,例如`CloseableHttpClient`用于创建HTTP客户端实例,`...
- URI(Uniform Resource Identifier)是资源的唯一标识,上传和下载时,只需要改变`HttpPost`或`HttpGet`对象的URI即可指向不同的服务器地址。 - 如果需要动态修改URI,可以使用字符串操作函数,如替换或拼接,...
这个"Httpclient资源包.zip"可能包含了各种与HttpClient相关的代码示例、文档、库文件和其他辅助材料,帮助开发者更好地理解和使用这个库。下面,我们将深入探讨HttpClient的核心概念、功能以及如何在实际项目中应用...