with session.get(url, stream=True, proxies=routes,
                 timeout=(5, 30)) as response:
    response.raise_for_status()
    with open(part_path, 'wb') as output:
        for chunk in response.iter_content(chunk_size=64 * 1024):
            if chunk:
                output.write(chunk)

Gunakan pola ini dengan sesi Requests yang sudah ada di aplikasi, rute proxy, URL, dan jalur output sementara. Untuk rute HTTP publik, daftar proxy HTTP menyediakan alamat kandidat untuk pemetaan proxy Anda. Pola streaming mengonsumsi isi secara bertahap alih-alih mengambil response.content lalu menulis objek kedua berukuran penuh.

Pertahankan sifat itu sepanjang pengunduhan: stream=True menunda isi, tetapi mengakses response.content setelahnya masih dapat mengumpulkannya seluruhnya di memori. Ukuran potongan iter_content adalah preferensi baca, bukan permintaan pengodean transfer HTTP terpotong di situs web atau proxy.

Pengelola konteks respons menutup respons bahkan jika penulisan gagal atau aplikasi berhenti lebih awal. Pasangan batas waktu yang diilustrasikan bukan tenggat waktu nyata untuk seluruh transfer; atur kebijakan masa hidup pengunduhan secara terpisah sesuai kebutuhan.

Setelah konsumsi berhasil, periksa artefak yang diharapkan aplikasi sebelum menerbitkan nama akhirnya. Saat terputus, pertahankan file parsial hanya di bawah kebijakan lanjutan yang disengaja, dengan metadata yang mengidentifikasi representasi jarak jauh. File sementara yang tidak kosong bukanlah pengunduhan yang berhasil.

Artikel terkait