import urllib2, sys //Progress.py def chunk_report(bytes_so_far, chunk_size, total_size): percent = float(bytes_so_far) / total_size percent = round(percent*100, 2) sys.stdout.write("Downloaded %d of %d bytes (%0.2f%%)\r" % (bytes_so_far, total_size, percent)) if bytes_so_far >= total_size: sys.stdout.write('\n') def chunk_read(response, chunk_size=8192, report_hook=None): total_size = response.info().getheader('Content-Length').strip() total_size = int(total_size) bytes_so_far = 0 data = [] while 1: chunk = response.read(chunk_size) bytes_so_far += len(chunk) if not chunk: break data += chunk if report_hook: report_hook(bytes_so_far, chunk_size, total_size) return "".join(data) if __name__ == '__main__': site= "http://download.thinkbroadband.com/50MB.zip" hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3', 'Accept-Encoding': 'none', 'Accept-Language': 'en-US,en;q=0.8', 'Connection': 'keep-alive'} req = urllib2.Request(site, headers=hdr) response = urllib2.urlopen(req); chunk_read(response, report_hook=chunk_report) print "done" Source : http://stackoverflow.com/questions/5783517/downloading-progress-bar-urllib2-python