import requests
from pathlib import Path
from tqdm import tqdm
def download(url: str, dest: str | Path, chunk: int = 1 << 16) -> Path:
dest = Path(dest)
with requests.get(url, stream=True, timeout=30) as r:
r.raise_for_status()
total = int(r.headers.get("content-length") or 0)
if dest.exists() and dest.stat().st_size == total:
return dest # already complete
with dest.open("wb") as f, tqdm(
total=total, unit="B", unit_scale=True, desc=dest.name
) as bar:
for piece in r.iter_content(chunk_size=chunk):
f.write(piece)
bar.update(len(piece))
return dest
download("https://example.com/big-file.zip", "downloads/big-file.zip")
Create a free account and build your private vault. Share publicly whenever you want.