response.raw
파일 객체 를 사용하거나 응답을 반복 할 수 있습니다 .
response.raw
파일과 같은 객체 를 사용하는 것은 기본적으로 압축 된 응답 (GZIP 또는 deflate)을 디코딩하지 않습니다. decode_content
어트리뷰트를 True
(로 requests
설정하여 False
디코딩 자체를 제어 하도록 설정하여) 어쨌든 압축을 풀도록 할 수 있습니다 . 그런 다음 shutil.copyfileobj()
파이썬이 데이터를 파일 객체로 스트리밍 하도록 할 수 있습니다 :
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)
응답을 반복하려면 루프를 사용하십시오. 이와 같이 반복하면 데이터가이 단계에서 압축 해제됩니다.
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)
128 바이트 단위로 데이터를 읽습니다. 다른 청크 크기가 더 잘 작동한다고 생각되면 사용자 지정 청크 크기와 함께이 Response.iter_content()
방법 을 사용하십시오 .
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)
파이썬이 줄 바꿈을 시도하고 변환하지 않도록 대상 파일을 이진 모드로 열어야합니다. 우리는 또한 설정 stream=True
이 그래서 requests
먼저 메모리에 전체 이미지를 다운로드하지 않습니다.