response.raw
Dosya nesnesini kullanabilir veya yanıtı yineleyebilirsiniz.
response.raw
Dosya benzeri nesneyi kullanmak varsayılan olarak sıkıştırılmış yanıtların (GZIP veya deflate ile) kodunu çözmez. decode_content
Özniteliği olarak ayarlayarak yine de sizin için sıkıştırmasını açmaya zorlayabilirsiniz True
( kod çözmenin kendisini kontrol requests
edecek False
şekilde ayarlar ). Daha sonra shutil.copyfileobj()
Python'un verileri bir dosya nesnesine akışını sağlamak için kullanabilirsiniz :
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)
Yanıt üzerinde yineleme yapmak için bir döngü kullanın; bu şekilde yineleme, verilerin bu aşamada açılmasını sağlar:
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)
Bu, verileri 128 baytlık parçalar halinde okuyacaktır; başka bir yığın boyutunun daha iyi çalıştığını düşünüyorsanız, Response.iter_content()
yöntemi özel bir yığın boyutuyla kullanın:
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)
Python'un sizin için yeni satırları çevirmeyi denemediğinden emin olmak için hedef dosyayı ikili modda açmanız gerektiğini unutmayın. Biz de set stream=True
böylece requests
ilk belleğe tüm görüntüyü indirmez.