最近在项目中用到了HttpClient类库,有一个需求是下载网站中的图片,但是发现下载的图片不能打开,在网上搜索类似问题,没有找到解决的办法,无奈只得查看HttpClient的源代码,自己解决这个问题了。
在HttpMethodBase中发现如下代码:
public String getResponseBodyAsString() throws IOException {
byte[] rawdata = null;
if (responseAvailable()) {
rawdata = getResponseBody();
}
if (rawdata != null) {
return EncodingUtil.getString(rawdata, getResponseCharSet());
} else {
return null;
}
}
其中在返回网络资源的内容时,使用了指定的编码对网页内容或图片内容进行了编码,这样,对于图片来说内容当然不能显示了,所以在获得图片内容时要使用如下的方法:
public byte[] getResponseBody() throws IOException
或
public InputStream getResponseBodyAsStream() throws IOException
在把返回的内容存储到文件中,这样就实现了图片的自动下载,下面的代码演示了下载图片的过程
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;
/**
* 用HttpClient下载图片
* @author wei
*/
public class TestDownImage {
public static void main(String[] args) throws IOException{
HttpClient client = new HttpClient();
GetMethod get = new GetMethod("http://images.sohu.com/uiue/sohu_logo/beijing2008/2008sohu.gif");
client.executeMethod(get);
File storeFile = new File("c:/2008sohu.gif");
FileOutputStream output = new FileOutputStream(storeFile);
//得到网络资源的字节数组,并写入文件
output.write(get.getResponseBody());
output.close();
}
}
HttpClient是Apache组织的一个项目,作为Http客户端类库,功能十分强大,正在关注这个项目中,欢迎大家和我交流使用HttpClient类库的经验!
分享到:
相关推荐
HttpURLConnection与HttpClient的区别: HttpClient是个很不错的...HttpURLConnection是java的标准类,可以实现简单的基于URL请求、响应功能,什么都没封装,用起来太原始,比如重访问的自定义,以及一些高级功能等。
本教程将详细介绍如何利用HttpClient实现文件的上传与下载,并且实时监控进度,以便在UI上显示进度条。 首先,理解HttpClient的基本用法是至关重要的。HttpClient是Apache的一个组件,它提供了丰富的API来构建网络...
《 httpClient及android 原生接口实现下载并显示图片》博客对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/17609771
- 读取`HttpEntity`的内容并写入到本地文件,实现图片的下载。 3. **修改上传和下载的URI**: - URI(Uniform Resource Identifier)是资源的唯一标识,上传和下载时,只需要改变`HttpPost`或`HttpGet`对象的URI...
通过HTTPClient实现HTTP请求,利用RESTful接口定义清晰的操作方式,可以构建高效、灵活的文件传输方案。同时,理解并遵循良好的编程实践,如编写详细注释,对于提高代码质量和团队效率也是十分重要的。
### 使用HttpClient类实现查询申通快递功能的知识点详解 #### 一、背景介绍 随着电子商务的迅速发展,物流服务已成为日常生活中不可或缺的一部分。对于企业和个人用户来说,能够实时查询包裹的状态变得尤为重要。...
在Android开发中,网络通信是应用的核心功能之一,而`Android Asynchronous HTTPClient`(也称为AsyncHttpClient)是一个流行的库,用于实现异步HTTP请求,它使得开发者可以在不阻塞主线程的情况下执行网络操作,...
HttpClient是一个由Apache基金会开发的Java库,主要用于执行HTTP请求,实现客户端的HTTP通信。本手册将详细探讨HttpClient 3.1版本,包括其源代码分析和使用指南,帮助开发者充分利用这个强大的工具。 一、...
总的来说,通过HttpClient实现文件上传并提供进度显示,涉及到网络通信、多部分实体构造、监听进度和UI更新等多个环节。在实际应用中,应考虑性能优化、错误处理和兼容性问题,确保文件上传功能的稳定性和用户体验。
在“httpclient爬取美图”项目中,获取到图片的URL后,可以使用HttpClient下载图片。首先,创建HttpGet请求,然后获取响应的InputStream,再通过FileOutputStream将流写入本地文件: ```java FileOutputStream ...
这可以通过`HttpClientBuilder`类来实现,可以定制化连接管理、超时设置等选项。 3. **构建HTTP请求**:使用HttpClient提供的方法,如`HttpGet`、`HttpPost`等,根据需求创建GET或POST请求。例如,为执行GET请求,...
使用c#实现的HttpClient拼接multipart/form-data形式参数post提交数据,包含图片内容,有需要的可以下载,希望能帮到有需要的人,
在`HttpClient.h`和`HttpClient.cpp`中,我们有HTTP客户端的实现。客户端用于发起HTTP请求,获取服务器的响应。mongoose库也提供了创建HTTP客户端的功能,通过`mg_connect_http()`函数可以建立到服务器的连接,并...
4. **请求和响应处理**:通过HttpEntity和HttpEntityEnclosingRequest接口,HttpClient支持各种类型的请求实体和响应实体,如文本、图片、文件等。 5. **异步请求**:虽然HttpClient 3.0主要设计为同步模型,但通过...
在上传或下载包含多部分数据(如图片、文件等)的HTTP请求时,这个库非常有用。例如,它允许你在POST请求中附加文件,或者在处理包含附件的HTTP响应。 总结起来,这些JAR包组合在一起,为Java开发者提供了一个完整...
- 在上传头像或图片之前,需要将其读取到内存中。这通常通过`FileInputStream`实现,然后转换成`InputStream`,以便于添加到HTTP请求的实体中。 5. **设置请求头**: - 在POST请求中,可能需要设置特定的请求头,...
- **文件上传下载**:通过POST或PUT请求,HttpClient 可以实现文件的上传,通过GET请求实现文件的下载。 - **模拟登录**:HttpClient 支持多种身份验证机制,可以用来模拟用户登录网站。 5. **最佳实践** - **...
在本示例中,我们将关注“httpclient使用post方法上传多个图片和其他参数的demo源码”,这是一个涉及到文件上传和参数传递的重要场景。 在Web开发中,POST方法常用于向服务器提交数据,比如表单数据或文件。...
在Android应用程序中,`HttpClient`经常被用于实现网络通信,比如上传或下载文件。下面将详细讨论`HttpClient`在Android中的应用及其相关知识点。 一、`HttpClient`基础 1. `HttpClient`类:它是整个框架的核心,...