Response 객체 살펴보기
Contents
8.4. Response
객체 살펴보기¶
requests
객체를 이용하여 서버에 요청을 보내면, 서버는 processing
과정을 거쳐 결과를 Response
객체에 담아서 클라이언트에게 보내줍니다. 아래 코드에서는 response
변수에 담기게 됩니다.
response = requests.get('https://api.example.com/data')
그렇다면 Response
객체에는 도대체 어떤 정보가 담겨 있으며, 어떤 메서드를 사용할 수 있을까요?
아주 간단하게 서버가 보내온 상태 코드(status code) 확인해 보겠습니다.
import requests
x = requests.get('https://w3schools.com')
print(x.status_code) # 200 출력됨
8.4.1. Response
객체 정의¶
Response
객체가 가지고 있는 모든 속성과 메서드는 다음 표와 같습니다.
Property/ |
Description |
---|---|
apparent_encoding |
예상 인코딩을 반환 |
close() |
서버와의 연결 종료 |
content |
응답의 내용을 바이트 단위로 반환 |
cookies |
서버에서 반환된 쿠키가 포함된 CookieJar 객체를 반환 |
elapsed |
요청을 보낸 시점부터 응답이 도착한 시점까지의 시간을 나타내는 timedelta 객체를 반환 |
encoding |
r.text를 디코딩하는 데 사용되는 인코딩을 반환 |
headers |
응답 헤더를 사전 형태로 반환 |
history |
요청의 이력을 가진 응답 객체의 리스트를 반환 |
is_permanent_redirect |
응답이 영구 리디렉션된 URL인지 여부를 나타내는 True 또는 False를 반환 |
is_redirect |
응답이 리디렉션되었는지 여부를 나타내는 True 또는 False를 반환 |
iter_content() |
응답의 내용을 청크 단위로 순회 |
iter_lines() |
응답의 내용을 라인 단위로 순회 |
json() |
결과를 JSON 객체로 반환(결과가 JSON 형식으로 작성되지 않은 경우 오류가 발생) |
links |
헤더 링크를 반환 |
next |
리디렉션에서 다음 요청을 위한 PreparedRequest 객체를 반환 |
ok |
status_code가 400보다 작은 경우 True, 그렇지 않은 경우 False를 반환 |
raise_for_status() |
오류가 발생한 경우 HTTPError 객체를 반환 |
reason |
상태 코드에 해당하는 텍스트를 반환 |
request |
이 응답을 요청한 요청 객체를 반환 |
status_code |
상태를 나타내는 숫자를 반환(예: 200은 OK, 404는 Not Found) |
text |
응답의 내용을 유니코드로 반환 |
url |
응답의 URL을 반환 |
8.4.2. Response
객체 활용하기¶
다양한 형태로 Response
객체를 활용할 수 있습니다.
import requests
# 데모를 위한 예제 URL
url = 'https://jsonplaceholder.typicode.com/posts/1'
# GET 요청 보내기
response = requests.get(url)
# Response 객체의 주요 속성과 메서드 데모
print("URL:", response.url)
print("상태 코드:", response.status_code)
print("사유:", response.reason)
print("헤더:", response.headers)
print("텍스트 (처음 100자):", response.text[:100])
print("콘텐츠 (처음 100자):", response.content[:100])
print("JSON (해당되는 경우):", response.json())
print("인코딩:", response.encoding)
print("소요 시간:", response.elapsed)
print("히스토리:", response.history)
print("요청 객체:", response.request)
# 성공적인 상태 코드인지 확인
if response.ok:
print("요청이 성공했습니다.")
# 잘못된 응답에 대해 예외 발생 예제
try:
response.raise_for_status()
except requests.exceptions.HTTPError as err:
print("HTTP 오류 발생:", err)
# 응답 콘텐츠를 줄 단위로 반복하는 예제
for line in response.iter_lines():
if line:
print(line.decode('utf-8'))
# 응답 콘텐츠를 파일에 저장하는 예제
with open('response_content.txt', 'wb') as file:
file.write(response.content)
# 리소스 해제를 위해 응답 종료
response.close()