发生数据包丢失时,Python下载文件将停止

时间:2012-03-28 15:05:15

标签: python download urllib2 urllib

我正在尝试下载7到30 MB之间的zip文件。有时4或5个文件将通过,但最近我甚至无法获得1个文件下载。我的脚本不会抛出错误,连接只是停止接收数据。在ping源网站并观看我的网络监视器后,下载似乎完全停止在“请求超时”的ping中。

我尝试过urllib2,urllib和httplib2。

我试过urllib2:

remoteFile = urllib2.urlopen(url)
content = remoteFile.read()
remoteFile.close()

f = open(fpath, 'wb')
f.write(content)
f.close()

req = Request(url)
# Open the url
f = urlopen(req)
# Open our local file for writing
local_file = open(fpath, "wb")
#Write to our local file
local_file.write(f.read())
local_file.close()

使用urllib:

f = urllib.urlopen(url)
# Open our local file for writing
local_file = open(fpath, "wb")
#Write to our local file
local_file.write(f.read())
local_file.close()

使用httplib2:

h = httplib2.Http(".cache")
resp, content = h.request(url, "GET")
f = open(fpath, 'wb')
f.write(content)
f.close()

我甚至尝试以块的形式下载:

req = urllib2.urlopen(url)
downloaded = 0
CHUNK = 256 * 10240
with open(file, 'wb') as fp:
    while True:
        chunk = req.read(CHUNK)
        downloaded += len(chunk)
        print str(downloaded/1000000.0) + 'Mb'
        if not chunk: break
        fp.write(chunk)

但由于丢失了数据包,它在第3个块之后才停止。我已经尝试过这些来自其他网站的较小下载,所以我知道我正在编码它们。同样,它永远不会抛出错误。连接关闭时,Python模块在20分钟或更长时间内不会关闭。

我最后不得不放弃,只是用C#写。到目前为止,我没有遇到任何问题。 python不处理数据包丢失吗?

0 个答案:

没有答案