- 浏览: 346124 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
白色蜻蜓:
...
(转载)新浪微博错误提示代码 -
crzdot:
我也是用ultroiso做的mini启用盘,然后再把iso拷到 ...
centos6.4安装 -
k496229870:
...
libgdx学习之Camera -
DiaoCow:
蛮不错的。
redis命令思维导图 -
kingdelee:
HTTPClient完胜?
URLConnection与HttpClient的对比
import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import org.apache.http.Header; import org.apache.http.HeaderElement; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; /** * 说明 * 利用httpclient下载文件 * maven依赖 * <dependency> * <groupId>org.apache.httpcomponents</groupId> * <artifactId>httpclient</artifactId> * <version>4.0.1</version> * </dependency> * 可下载http文件、图片、压缩文件 * bug:获取response header中Content-Disposition中filename中文乱码问题 * @author tanjundong * */ public class HttpDownload { public static final int cache = 10 * 1024; public static final boolean isWindows; public static final String splash; public static final String root; static { if (System.getProperty("os.name") != null && System.getProperty("os.name").toLowerCase().contains("windows")) { isWindows = true; splash = "\\"; root="D:"; } else { isWindows = false; splash = "/"; root="/search"; } } /** * 根据url下载文件,文件名从response header头中获取 * @param url * @return */ public static String download(String url) { return download(url, null); } /** * 根据url下载文件,保存到filepath中 * @param url * @param filepath * @return */ public static String download(String url, String filepath) { try { HttpClient client = new DefaultHttpClient(); HttpGet httpget = new HttpGet(url); HttpResponse response = client.execute(httpget); HttpEntity entity = response.getEntity(); InputStream is = entity.getContent(); if (filepath == null) filepath = getFilePath(response); File file = new File(filepath); file.getParentFile().mkdirs(); FileOutputStream fileout = new FileOutputStream(file); /** * 根据实际运行效果 设置缓冲区大小 */ byte[] buffer=new byte[cache]; int ch = 0; while ((ch = is.read(buffer)) != -1) { fileout.write(buffer,0,ch); } is.close(); fileout.flush(); fileout.close(); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 获取response要下载的文件的默认路径 * @param response * @return */ public static String getFilePath(HttpResponse response) { String filepath = root + splash; String filename = getFileName(response); if (filename != null) { filepath += filename; } else { filepath += getRandomFileName(); } return filepath; } /** * 获取response header中Content-Disposition中的filename值 * @param response * @return */ public static String getFileName(HttpResponse response) { Header contentHeader = response.getFirstHeader("Content-Disposition"); String filename = null; if (contentHeader != null) { HeaderElement[] values = contentHeader.getElements(); if (values.length == 1) { NameValuePair param = values[0].getParameterByName("filename"); if (param != null) { try { //filename = new String(param.getValue().toString().getBytes(), "utf-8"); //filename=URLDecoder.decode(param.getValue(),"utf-8"); filename = param.getValue(); } catch (Exception e) { e.printStackTrace(); } } } } return filename; } /** * 获取随机文件名 * @return */ public static String getRandomFileName() { return String.valueOf(System.currentTimeMillis()); } public static void outHeaders(HttpResponse response) { Header[] headers = response.getAllHeaders(); for (int i = 0; i < headers.length; i++) { System.out.println(headers[i]); } } public static void main(String[] args) { // String url = "http://bbs.btwuji.com/job.php?action=download&pid=tpc&tid=320678&aid=216617"; String url="http://www.dy1000.com/img/20120701/1999311085_150_200.JPG"; // String filepath = "D:\\test\\a.torrent"; String filepath = "D:\\test\\a.jpg"; HttpDownload.download(url, filepath); } }
参考资料:
http://eyecm.com/httpclient4-1-tutorial-official-examples-to-explain-httpclient4-1-usage/
http://eyecm.com/httpclient-download/
评论
3 楼
gaojunda413
2012-08-03
macken 写道
gaojunda413 写道
Content-Disposition 我获取的是乱码 各种转也没解出来,求告知
获取所有网站的header都是乱码吗?方便的话可以贴一下代码
已经好了
setParameter(CoreProtocolPNames.HTTP_ELEMENT_CHARSET, "gbk");
2 楼
macken
2012-07-06
gaojunda413 写道
Content-Disposition 我获取的是乱码 各种转也没解出来,求告知
获取所有网站的header都是乱码吗?方便的话可以贴一下代码
1 楼
gaojunda413
2012-07-06
Content-Disposition 我获取的是乱码 各种转也没解出来,求告知
发表评论
-
volatile变量
2013-09-04 10:44 8651.volatile变量 当变量声明为volatile类 ... -
slf4j源码分析
2012-12-11 15:58 5842近期由于想利用应用程序的输出日志做一些应用,了解了下java ... -
HashSet、LinkedHashSet 实现原理
2012-12-07 16:00 1565之前没用过HashSet,听到别人提到HashSet,看了下源 ... -
HashMap、LinkedHashMap实现原理
2012-12-07 15:47 1096看源码可以知道HashMap内 ... -
logback udp appender
2012-11-29 11:44 2436package com.macken; impor ... -
log4j
2012-11-23 11:47 961log4j简要结构图 logback -
ThreadLocal这么回事
2012-11-21 18:04 1427今天线程池实现,看到一个使用ThreadLocal的地方,研 ... -
Java关键字synchronized
2012-08-15 17:57 01、synchronized关键字的作 ... -
HtmlCleaner CleanerProperties 参数配置
2012-07-06 15:34 3076Parameter Default ... -
dom4j读取http xml文件
2012-07-04 14:19 1519使用dom4j读取http xml文件,结合XPATH提取数据 ... -
(转)Filter(过滤器)简介和工作原理
2012-07-04 10:07 1369Filter(过滤器)简介 F ... -
Java 解析BT Torrent文件
2012-07-03 14:49 0参考资料: http://www.cesclub.co ... -
URLConnection与HttpClient的对比
2012-07-01 22:00 2719from:http://www.innovation.ch/j ... -
httpclient进化
2012-07-01 21:35 1375httpcomponents与commons-httpclie ... -
(转)HttpClient4.1入门教程
2012-07-01 21:05 0HttpClient简介 1) 百科名片: H ... -
Java操作excel
2012-06-28 13:57 917使用JexcelApi包 maven依赖 <de ... -
Java并发编程之ConcurrentHashMap
2012-06-18 15:10 905http://www.goldendoc.org/2011/0 ... -
正则提起图片地址
2012-06-16 14:07 1045<p><img alt=" ... -
Web-harvest 2.0 Maven 配置
2012-05-08 14:26 1422<project xmlns="htt ... -
htmlparse module导入eclipse
2012-04-28 15:08 983源码地址 https://htmlparser.svn.s ...
相关推荐
本主题将深入探讨如何利用HttpClient实现文件的下载功能,同时也会涉及相关的源码解析和辅助工具的使用。 首先,HttpClient是一个Java库,它允许开发者以一种与HTTP协议兼容的方式发送请求并接收响应。它提供了丰富...
标题中的“对于C#(HttpClient)方式网络请求的封装”是指使用C#编程语言,特别是通过HttpClient类来处理HTTP网络请求,并将这个过程进行抽象和封装,以便在多个地方重复使用。HttpClient是.NET Framework和.NET ...
在Android开发中,进行网络通信时,我们...在"ccb-ita"这个文件中,可能包含了具体的代码实现或者示例,可以帮助你更好地理解和实践这些概念。记得在使用HttpClient时,遵循最佳实践,以保证网络请求的稳定性和效率。
本项目聚焦于轻量级的C++实现的HTTP服务器(httpserver)和HTTP客户端(httpclient),利用mongoose库作为基础,为开发者提供了一种简单且高效的方法来添加HTTP功能,而无需依赖如libcurl这样的大型库。 HTTP(超...
4. `Commons`:这部分包含了一些通用工具类,如编码处理、URL解析等,为HttpClient提供了丰富的辅助功能。 5. `HttpMime`:这个模块提供了处理MIME类型和多部分请求的能力,对于上传文件或处理复杂表单数据非常有用...
在Web开发中,有时候我们需要从远程服务器获取数据或者向其发送数据,此时,`HttpClient` 类提供了一个方便的接口来实现这样的功能。下面我们将深入探讨这个类的一些核心概念和功能。 首先,`HttpClient` 类通常...
标签“httpclient jar”进一步强调了我们关注的焦点是HttpClient的JAR文件,这是一个包含HttpClient类和资源的归档文件,用于Java应用程序的构建和运行。 在压缩包的文件名称列表中,我们看到了其他几个重要的库: ...
在`app.module.ts`文件中,导入`HttpClientModule`并将其添加到`@NgModule.imports`数组中: ```typescript import { HttpClientModule } from '@angular/common/http'; @NgModule({ imports: [ // ... ...
7. **依赖库**:压缩包中包含的其他JAR文件(如`commons-collections.jar`、`commons-lang.jar`等)是Apache Commons项目的一部分,它们提供了各种通用的工具类和集合操作,对HttpClient的使用提供了辅助支持。...
HTTPCore是Apache HttpClient的基础,它提供了低级别的HTTP连接管理和传输实现。这个库包括了对HTTP协议基本元素的抽象,如连接、请求和响应。HTTPCore的主要功能包括: - **连接管理**:处理TCP/IP连接的建立和...
在"org.apache.commons.httpclient"这个库中,包含了多种HTTP协议的实现,如GET、POST、PUT等,以及对HTTPS的支持,便于开发人员构建网络应用。 HttpClient库的核心类是`HttpClient`,它提供了执行HTTP请求的基本...
这些属性可以通过Java的`Properties`类加载,或者使用Spring Boot的`@ConfigurationProperties`注解来绑定到配置文件。 在处理form数据时,HttpClient允许我们使用`UrlEncodedFormEntity`来编码表单参数,然后将其...
HTTPClient.cpp很可能是实现HTTP客户端逻辑的主要代码文件,包括设置HTTP请求头、构造GET或POST请求、发送数据到服务器、接收服务器响应以及解析返回的HTTP响应等步骤。可能包含的功能有: 1. 创建socket连接:使用...
在描述中提到的"通用静态页面发布引擎"很可能依赖于这两个库来实现HTTP通信,比如下载网页、上传文件或执行其他网络操作。HttpClient处理实际的HTTP交互,而Codec库则可能被用来处理如URL编码、Base64编码等与数据...
一个通用的日志类应包含写入不同级别的日志(如Error、Info、Debug)和日志输出目标(如控制台、文件、数据库)的功能。 3. **HTTP类**: C#中的System.Net命名空间提供了HttpClient类用于发送HTTP请求。通用的...
在本文中,我们将深入探讨如何使用C#和WindowsForm技术实现文件的上传和下载功能,主要涉及以下几个核心知识点: 1. **C#编程基础**:C#是Microsoft开发的一种面向对象的编程语言,广泛用于Windows应用程序开发,...
在Linux环境下利用C语言实现HTTP请求的发送是一个深入理解网络编程和HTTP协议的好机会。本文将根据提供的代码片段,详细解析如何在Linux下使用C语言实现HTTP请求的发送,包括必要的头文件、函数定义以及主函数中的...
在Java中,我们可以使用`java.io`和`java.nio`包下的类来实现文件的比较。例如,`java.io.File`类可以获取文件的基本信息,通过比较文件大小和修改时间进行初步判断。对于内容比较,可以使用`java.nio.file.Files`...
标题“php实现httpclient类示例”和描述“主要介绍了php实现httpclient类示例,需要的朋友可以参考下”指明了本文的重点在于向PHP开发者介绍如何在PHP中创建一个HTTP客户端类,从而方便地发送HTTP请求并处理响应。...