Получить размер файла из значения "Content-Length" из файла в Python 3.2

Я хочу получить Content-Length значение из мета-переменной. Мне нужно получить размер файла, который я хочу скачать. Но последняя строка возвращает ошибку, HTTPMessage объект не имеет атрибута getheaders,

import urllib.request
import http.client

#----HTTP HANDLING PART----
 url = "http://client.akamai.com/install/test-objects/10MB.bin"

file_name = url.split('/')[-1]
d = urllib.request.urlopen(url)
f = open(file_name, 'wb')

#----GET FILE SIZE----
meta = d.info()

print ("Download Details", meta)
file_size = int(meta.getheaders("Content-Length")[0])

6 ответов

Решение

Похоже, вы используете Python 3 и прочитали некоторый код / ​​документацию для Python 2.x. Это плохо документировано, но нет getheaders метод в Python 3, но только get_all метод.

Смотрите этот отчет об ошибке.

За Content-Length:

file_size = int(d.getheader('Content-Length'))

Измените последнюю строку на:

file_size = int(meta.get_all("Content-Length")[0])

Вы должны рассмотреть возможность использования Requests:

import requests

url = "http://client.akamai.com/install/test-objects/10MB.bin"
resp = requests.get(url)

print resp.headers['content-length']
# '10485760'

Для Python 3 используйте:

print(resp.headers['content-length'])

вместо.

response.headers['Content-Length'] работает как на Python 2, так и на 3:

#!/usr/bin/env python
from contextlib import closing

try:
    from urllib2 import urlopen
except ImportError: # Python 3
    from urllib.request import urlopen


with closing(urlopen('http://stackru.com/q/12996274')) as response:
    print("File size: " + response.headers['Content-Length'])
import urllib.request

link = "<url here>"

f = urllib.request.urlopen(link)
meta = f.info()
print (meta.get("Content-length"))
f.close()

Работает с Python 3.x

Другие вопросы по тегам