Figure Out a Download File-Size With Requests

To get the filesize of a download is really easy, servers usually provide a Content-Length in its header response that let us know how heavy is the content we are requesting. We can find out this content length opening our shell and requesting a HEAD response in linux:

HEAD response

As you can see, our content length is display in bytes. Let’s try to get this response with Requests

Display Content-Length with Requests

Let’s use an image from httpbin. Remember to make a HEAD request instead of a GET request, this way we don’t have to download the entire file

import requests
>>> req = requests.head('https://httpbin.org/image/png')
>>> req.headers['Content-Length']
'8090'

When we filter the header with the Content-Length key we can see how heavy our request will be without having to actually download the file.

Calculating the file-size without Content-Length

This is a tricky one because, well, not always every web server is going to provide you with a Content-Length in its header, this happens sometimes with csv, xml, and other text file-types, luckily they’re not that heavy and we can provide a GET request to know the download size

>>> req = requests.get('http://data.example.com/attachment_id=12')
>>> len(req.content)
659

As we can see here, we can calculate a file size (mostly text files) using the len() method. If you have a better alternative you can show it off in the comments bellow.