我正在尝试下载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不处理数据包丢失吗?