I want to get the size of an http://.. file before I download it. I don't know how to use http request.
Thanks!
import urllib2
f = urllib2.urlopen("http://your-url")
size= f.headers["Content-Length"]
print size
requests
module if I retrieve the file size is different from the one got from urlOpen, see: >>> requests.head(url).headers.get('content-length', None) '8176' >>> urllib.urlopen(url).info()['content-length'] '38227' >>> len(requests.get(url).content) 38274
Commented
Jul 5, 2014 at 9:46
The HTTP HEAD
method was invented for scenarios like this (wanting to know data about a response without fetching the response itself). Provided the server returns a Content-Length header (and supports HEAD
), then you can find out the size of the file (in octets) by looking at the Content-Length returned.
Here the complete answer:
import urllib2
f = urllib2.urlopen ("http://your-url")
if "Content-Length" in f.headers:
size = int (f.headers["Content-Length"])
else:
size = len (f.read ());
print size
Not all pages have a content-length header. In that case, the only option is to read the whole page:
len(urllib2.urlopen('http://www.google.com').read());