介绍一个多线程下载工具Axel

Posted on Fri 11 November 2011 in it • Tagged with HTTP, linux

介绍

主页:http://axel.alioth.debian.org/ 和wget和curl相比,最大的亮点是支持多线程。

Axel tries to accelerate HTTP/FTP downloading process by using multiple connections for one file. It can use multiple mirrors for a download.

效果

多线程与单线程下载效果对比:195.61 KB/s VS 88.5 KB/s

axel -o . -n 5 http://li3huo.com ...


Continue reading

用Python实现应用Last-Modified和ETag避免下载重复内容

Posted on Wed 09 November 2011 in it • Tagged with HTTP, Program Language, Python

Http 1.1中避免重复下载的标记

使用Http1.1中定义好的头信息来避免重复下载,参考HTTP/1.1 Section 14 Header Field Definitions中的14.19 ETag/14.24 If-Match/14.29 Last-Modified/14.25 If-Modified-Since

开发者把Last-Modified 和ETags请求的http报头一起使用,能够有效利用本地缓存,降低无谓的重复下载。

示例代码逻辑

  1. 客户端下载一个链接(Sample);
  2. 服务器返回Sample,Sample中记录Last-Modified/ETag标记;
  3. 客户端再次下载这个链接,并将上次请求时服务器返回的Last-Modified/ETag一起传递给服务器;
  4. 服务器检查该Last-Modified或ETag,并判断出该页面自上次客户端请求之后还未被修改,直接返回响应304和一个空的响应体。 其实在《Dive Into Python》中就有相当详细的实例代码,强烈建议没看过这本书的python程序员们认真学习一下,会提升面向对象编程和网络编程能力的。

示例代码 ...


Continue reading

用HTTP PUT方式传输数据

Posted on Thu 08 May 2008 in 我用(IT) • Tagged with HTTP, java

- 功能说明
客户端通过发起http put请求,把文件传送到服务器上

- Client
用Java实现,有两种方案:
1. Jakarta HttpClient

2. 用JDK自带的HttpURLConnection
//URL地址中包含文件路径和名称的信息
URL url = new URL("http://...");  
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true)
conn.setRequestMethod("PUT");
//getInputStream,写入数据
//读取状态

需要注意的地方:
1. 真实使用时需要认证
2. 传输资源的名称要包含在URL信息中
3. 注意对回传状态的处理

- Server
实现HttpServlet中的doPut方法,用Request.getInputStream读取数据
根据RFC1616中9.6 PUT的要求,回写状态

- 参考
HTTP specification


Continue reading