Anda bisa menggunakan response.rawobjek file , atau beralih pada respons.
Untuk menggunakan response.rawobjek seperti file tidak akan, secara default, mendekode respons terkompresi (dengan GZIP atau deflate). Anda dapat memaksanya untuk mendekompresi untuk Anda dengan mengatur decode_contentatribut ke True( requestsmengaturnya Falseuntuk 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=Trueagar requeststidak mengunduh seluruh gambar ke dalam memori terlebih dahulu.