Anda bisa menggunakan response.raw
objek file , atau beralih pada respons.
Untuk menggunakan response.raw
objek seperti file tidak akan, secara default, mendekode respons terkompresi (dengan GZIP atau deflate). Anda dapat memaksanya untuk mendekompresi untuk Anda dengan mengatur decode_content
atribut ke True
( requests
mengaturnya False
untuk mengontrol decoding itu sendiri). Anda bisa menggunakan shutil.copyfileobj()
Python stream data ke objek file:
import requests
import shutil
r = requests.get(settings.STATICMAP_URL.format(**data), stream=True)
if r.status_code == 200:
with open(path, 'wb') as f:
r.raw.decode_content = True
shutil.copyfileobj(r.raw, f)
Untuk beralih pada respons gunakan loop; iterasi seperti ini memastikan bahwa data didekompresi pada tahap ini:
r = requests.get(settings.STATICMAP_URL.format(**data), stream=True)
if r.status_code == 200:
with open(path, 'wb') as f:
for chunk in r:
f.write(chunk)
Ini akan membaca data dalam 128 byte chunks; jika Anda merasa ukuran chunk lain berfungsi lebih baik, gunakan Response.iter_content()
metode ini dengan ukuran chunk khusus:
r = requests.get(settings.STATICMAP_URL.format(**data), stream=True)
if r.status_code == 200:
with open(path, 'wb') as f:
for chunk in r.iter_content(1024):
f.write(chunk)
Perhatikan bahwa Anda perlu membuka file tujuan dalam mode biner untuk memastikan python tidak mencoba dan menerjemahkan baris baru untuk Anda. Kami juga mengatur stream=True
agar requests
tidak mengunduh seluruh gambar ke dalam memori terlebih dahulu.