Get file size from content-length value from file in python 3.2

I want to get the Content-Length value from a meta variable. I need to get the size of the file I want to upload. But the last line returns an error, the HTTPMessage object does not have the getheaders attribute.

 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
source share
6 answers

It looks like you are using Python 3 and have read the code / documentation for Python 2.x. It is poorly documented, but there is no getheaders method in Python 3, but only the get_all method.

See this bug report .

+9
source

for Content-Length :

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

You should consider using Requests :

 import requests url = "http://client.akamai.com/install/test-objects/10MB.bin" resp = requests.get(url) print resp.headers['content-length'] # '10485760' 

For Python 3 use:

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

instead.

+3
source

Change the final line to:

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

response.headers['Content-Length'] works on both Python 2 and 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']) 
+1
source
 import urllib.request link = "<url here>" f = urllib.request.urlopen(link) meta = f.info() print (meta.get("Content-length")) f.close() 

Works with python 3.x

0
source

All Articles