最近在项目中用到了HttpClient类库,有一个需求是下载网站中的图片,但是发现下载的图片不能打开,在网上搜索类似问题,没有找到解决的办法,无奈只得查看HttpClient的源代码,自己解决这个问题了。
在HttpMethodBase中发现如下代码:
java 代码
- public String getResponseBodyAsString() throws IOException {
- byte[] rawdata = null;
- if (responseAvailable()) {
- rawdata = getResponseBody();
- }
- if (rawdata != null) {
- return EncodingUtil.getString(rawdata, getResponseCharSet());
- } else {
- return null;
- }
- }
其中在返回网络资源的内容时,使用了指定的编码对网页内容或图片内容进行了编码,这样,对于图片来说内容当然不能显示了,所以在获得图片内容时要使用如下的方法:
java 代码
- public byte[] getResponseBody() throws IOException
- 或
- public InputStream getResponseBodyAsStream() throws IOException
在把返回的内容存储到文件中,这样就实现了图片的自动下载,下面的代码演示了下载图片的过程
java 代码
- 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;
-
-
-
-
-
- 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类库的经验!
分享到:
相关推荐
在Java开发中,HTTPClient和RESTful风格的接口被广泛用于实现文件的上传与下载功能。HTTPClient是一个强大的HTTP客户端库,而RESTful是一种轻量级的、基于HTTP协议的软件架构风格,常用于构建Web服务。在分布式系统...
本教程将详细介绍如何利用HttpClient实现文件的上传与下载,并且实时监控进度,以便在UI上显示进度条。 首先,理解HttpClient的基本用法是至关重要的。HttpClient是Apache的一个组件,它提供了丰富的API来构建网络...
《HttpClient 3.1:深入理解与应用》 ...本手册将详细探讨HttpClient 3.1版本,包括其源代码分析和使用指南,帮助...通过深入理解其源代码和使用手册,开发者可以有效地利用HttpClient来构建高质量的HTTP客户端应用程序。
标题“httpclient所需JAR包”表明我们正在讨论与使用HTTPClient库相关的Java档案(JAR)文件。 描述中的内容简洁,但可以...正确地将这些JAR包加入项目,可以确保你能够利用HTTPClient的功能来实现高效的网络通信。
4. **请求和响应处理**:通过HttpEntity和HttpEntityEnclosingRequest接口,HttpClient支持各种类型的请求实体和响应实体,如文本、图片、文件等。 5. **异步请求**:虽然HttpClient 3.0主要设计为同步模型,但通过...
在Android开发中,使用`HttpClient`进行图片上传是一项常见的需求,尤其在实现用户头像上传、照片分享等功能时。下面将详细解析如何利用`HttpClient`完成这一任务。 ### 使用`HttpClient`上传图片的关键步骤 #### ...
下面是如何使用HttpClient下载图片: ```java import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import ...
- 使用 Picasso 或 Glide 加载图片,它们能够优雅地处理网络图片加载。 - 使用 RxJava 结合 Retrofit,利用其强大的异步处理能力,实现复杂的网络请求逻辑。 总之,Android Asynchronous HTTPClient是实现异步网络...
本示例将探讨如何利用Apache HttpClient库与TestNG框架进行接口测试,以提高测试效率和准确性。 Apache HttpClient是一个开源Java库,允许开发者发送HTTP请求并接收响应,支持多种HTTP协议版本,包括HTTP/1.1和...
本文将详细介绍如何利用`HttpClient`类来实现查询申通快递的功能。 #### 二、HttpClient简介 `HttpClient`是一种用于发送HTTP请求并接收HTTP响应的工具库。它为开发者提供了高级别的API来执行HTTP操作,如GET、POST...
- **重用连接**:利用HttpClient的连接复用机制,减少网络延迟。 - **超时设置**:合理设置请求和连接超时,防止程序阻塞。 6. **SSL支持**:HttpClient支持HTTPS通信,可以配置SSLContext和KeyManager/...
2. 连接池管理:`MultiThreadedHttpConnectionManager`可以管理连接池,控制最大连接数和每个路由的最大连接数,以优化性能和资源利用。 五、Cookie管理 1. `CookieSpec`接口和`CookiePolicy`枚举:定义了Cookie的...
在找到图片链接后,我们再次利用HttpClient下载图片。通常,我们会将图片保存到本地,可能需要创建一个文件夹结构来分类存储,同时处理可能出现的重名、错误链接等问题。为了提高效率,可能会采用多线程或者异步下载...
在这个场景中,我们主要关注如何使用HttpClient进行文件上传。 文件上传通常涉及到Web服务器与客户端之间的交互,比如用户通过网页上传图片或...通过理解这些概念,你可以更有效地利用HttpClient实现文件上传功能。
### HttpClient4.5.1 手册知识点概览 #### 一、基础知识 **1.1 请求执行** - **HTTP请求:** 在客户端与服务器之间的交互过程中,客户端发送的每一条消息都称为一个请求。HTTP请求由三部分组成:请求行、请求头...
然后,可以使用Mime4j创建和构造多部分POST请求的MIME实体,接着利用Commons IO处理数据流,最后通过HttpClient发送由HttpCore支持的HTTP请求。这样,即使是在Android原生HTTPClient功能有限的情况下,也能实现强大...
通过学习和理解这些代码,开发者可以更好地掌握如何在Android应用中利用HTTPClient与服务器进行数据交互。 总结来说,本项目通过具体的代码示例,深入浅出地介绍了Android中HTTPClient的使用,包括GET和POST请求的...
在图片上传中,开发者可能利用HttpClient来发起POST请求,将图片数据作为请求体发送到服务器。 3. **commons-logging-1.1.jar**:这个JAR文件是Apache Commons Logging库的1.1版本。Logging库提供了一个接口层,...
HttpClient提供了发送HTTP请求并接收响应的方法,我们可以利用其GetByteArrayAsync方法获取图片的二进制数据,然后将其保存到本地文件系统。 以下是简单的URL图片下载步骤: 1. 创建一个HttpClient实例。 2. 使用...
通过合理利用HttpClient,开发者可以轻松地构建网络通信功能,实现游戏与服务器之间的数据交换,从而提升游戏体验和功能多样性。在实际项目中,开发者需要根据项目需求,灵活运用HttpClient提供的接口和特性,以满足...