9

我想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])
4

6 回答 6

13

看起来您正在使用 Python 3,并且已经阅读了 Python 2.x 的一些代码/文档。它的文档记录很差,但是 Python 3 中没有getheaders方法,只有一种get_all方法。

请参阅此错误报告

于 2012-10-21T08:51:37.863 回答
7

对于Content-Length

file_size = int(d.getheader('Content-Length'))
于 2012-10-21T14:56:41.073 回答
5

将最后一行更改为:

file_size = int(meta.get_all("Content-Length")[0])
于 2014-12-22T05:42:23.140 回答
4

您应该考虑使用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'])

反而。

于 2012-10-21T08:51:21.743 回答
2

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://stackoverflow.com/q/12996274')) as response:
    print("File size: " + response.headers['Content-Length'])
于 2015-07-23T00:28:29.200 回答
0
import urllib.request

link = "<url here>"

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

适用于 python 3.x

于 2015-07-22T17:31:26.357 回答