Тебе тоже подходит urllib2?Если да, вы можете использовать эту функцию:
def download_file(url):
"""Create an urllib2 request and return the request plus some useful info"""
name = filename_from_url(url)
r = urllib2.urlopen(urllib2.Request(url))
info = r.info()
if 'Content-Disposition' in info:
# If the response has Content-Disposition, we take filename from it
name = info['Content-Disposition'].split('filename=')[1]
if name[0] == '"' or name[0] == "'":
name = name[1:-1]
elif r.geturl() != url:
# if we were redirected, take the filename from the final url
name = filename_from_url(r.geturl())
content_type = None
if 'Content-Type' in info:
content_type = info['Content-Type'].split(';')[0]
# Try to guess missing info
if not name and not content_type:
name = 'unknown'
elif not name:
name = 'unknown' + mimetypes.guess_extension(content_type) or ''
elif not content_type:
content_type = mimetypes.guess_type(name)[0]
return r, name, content_type
Использование:
fp, filename, content_type = download_file('http://url/to/some/file')
with open('somefile', 'w') as dst:
shutil.copyfileobj(fp, dst)
Этот код обладает тем преимуществом, что никогда не считывает весь файл в память - поэтому он отлично работает для огромныхфайлы тоже.Кроме того, он также дает вам имя файла, полученное с сервера, и тип содержимого, если вы хотите / нуждаетесь в этом.