[파이썬] requests 스트리밍 응답 다루기

파이썬의 requests 모듈은 HTTP 요청을 간편하게 처리할 수 있는 강력한 도구입니다. 이 모듈을 사용하면 웹 사이트에서 데이터를 읽어오거나 API를 호출하는 등 다양한 작업을 수행할 수 있습니다.

하지만 때로는 서버로부터 큰 용량의 데이터를 스트리밍 방식으로 받아와야 할 때가 있습니다. 예를 들어, 파일 다운로드나 실시간 데이터 스트리밍 등입니다. 이런 경우, requests 모듈의 스트리밍 응답 기능을 사용하면 메모리를 효율적으로 관리하면서 데이터를 처리할 수 있습니다.

스트리밍 응답 처리하기

스트리밍 응답 처리를 시작하기 위해서는 requests 모듈에서 제공하는 get 함수를 사용하여 HTTP GET 요청을 보내야 합니다. 다음은 기본적인 스트리밍 요청 예제입니다:

import requests

url = 'http://example.com/streaming-data'  # 스트리밍 데이터를 가져올 URL

response = requests.get(url, stream=True)  # 스트리밍 응답 요청

# 응답을 조각조각으로 받아오기 위해 `iter_content` 함수를 사용
for chunk in response.iter_content(chunk_size=8192):
    # 받아온 데이터를 처리하는 로직 작성
    process_chunk(chunk)

위의 코드에서 stream=True 옵션을 사용하여 스트리밍 응답 요청을 지정하고, iter_content 함수를 사용하여 응답을 조각조각으로 받아옵니다. chunk_size 매개변수를 사용하여 데이터를 얼마씩 읽어올지 설정할 수 있습니다.

이제, 받아온 데이터를 처리하는 로직을 process_chunk 함수에 작성하면 됩니다. 예를 들어, 파일 다운로드를 진행한다면 chunk 데이터를 파일에 쓰는 등의 작업을 수행하면 됩니다.

스트리밍 응답 저장하기

스트리밍 응답을 받아와서 그대로 저장하려면 response 객체의 iter_content 함수 대신 iter_lines 함수를 사용할 수 있습니다. 이 함수를 사용하면 줄 단위로 응답을 받아올 수 있습니다. 다음은 스트리밍 응답을 파일로 저장하는 예제입니다:

import requests

url = 'http://example.com/streaming-data'  # 스트리밍 데이터를 가져올 URL
output_file = 'output.txt'  # 스트리밍 데이터를 저장할 파일 이름

response = requests.get(url, stream=True)  # 스트리밍 응답 요청

with open(output_file, 'wb') as f:
    # 응답을 줄 단위로 받아와 파일에 저장
    for line in response.iter_lines():
        if line:
            f.write(line + b'\n')

위의 코드에서는 iter_lines 함수를 사용하여 응답을 줄 단위로 받아오고, open 함수를 사용하여 파일을 열고 스트리밍 데이터를 저장합니다.

마무리

requests 모듈을 사용하면 파이썬에서 간단하게 스트리밍 응답을 다룰 수 있습니다. 이렇게 처리한 데이터를 파일에 저장하거나 필요한 로직에 맞게 처리하여 활용할 수 있습니다. 스트리밍 응답을 다루는 이러한 기능은 실시간 데이터 처리나 대용량 파일 다운로드 등 다양한 상황에서 유용하게 활용될 수 있습니다.