我知道如何使用urllib下载文件.但是,如果服务器允许,它会更快地同时下载同一文件的几个部分然后合并它们.
你是如何用Python做到的?如果你不能轻松地使用标准的lib,那么任何可以让你这样做的lib?
efo*_*nis 17
虽然我同意Gregory关于使用现有库的建议,但值得注意的是,您可以通过使用RangeHTTP标头来实现此目的.如果服务器接受字节范围请求,您可以启动多个线程并行下载文件的多个部分.例如,此代码段仅下载指定文件的字节0..65535:
import urllib2
url = 'http://example.com/test.zip'
req = urllib2.Request(url, headers={'Range':'bytes=0-65535'})
data = urllib2.urlopen(req).read()
Run Code Online (Sandbox Code Playgroud)
您可以通过发送HEAD请求来确定远程资源大小并查看服务器是否支持范围请求:
import urllib2
class HeadRequest(urllib2.Request):
def get_method(self):
return "HEAD"
url = 'http://sstatic.net/stackoverflow/img/sprites.png'
req = HeadRequest(url)
response = urllib2.urlopen(req)
response.close()
print respose.headers
Run Code Online (Sandbox Code Playgroud)
以上打印:
Cache-Control: max-age=604800
Content-Length: 16542
Content-Type: image/png
Last-Modified: Thu, 10 Mar 2011 06:13:43 GMT
Accept-Ranges: bytes
ETag: "c434b24eeadecb1:0"
Date: Mon, 14 Mar 2011 16:08:02 GMT
Connection: close
Run Code Online (Sandbox Code Playgroud)
从中我们可以看到文件大小为16542字节('Content-Length'),服务器支持字节范围('Accept-Ranges: bytes').