HTTP(Hypertext Transfer Protocol)는 웹 상에서 데이터를 주고받는 프로토콜로, 웹 애플리케이션 개발 및 API 통신에서 매우 중요한 역할을 합니다. 파이썬(Python)에서는 requests 라이브러리를 사용하여 간단하고 직관적으로 HTTP 요청을 처리할 수 있습니다. 이번 포스팅에서는 requests 라이브러리를 사용하여 HTTP 요청을 보내고, 응답을 처리하는 방법에 대해 알아보겠습니다.
1. requests 라이브러리란?
requests는 파이썬의 HTTP 라이브러리 중 하나로, 간단하고 편리한 인터페이스를 제공하여 HTTP 요청을 쉽게 보낼 수 있습니다. 이 라이브러리는 GET, POST, PUT, DELETE 등의 HTTP 메서드를 지원하며, 다양한 옵션을 통해 HTTP 요청을 커스터마이즈할 수 있습니다.
1.1. requests 라이브러리 설치
requests 라이브러리는 기본적으로 파이썬에 포함되어 있지 않으므로, 다음 명령어로 설치해야 합니다.
pip install requests
2. HTTP 요청 보내기
HTTP 요청은 주로 GET, POST, PUT, DELETE 메서드를 사용하여 서버와 상호작용합니다. requests 라이브러리는 이러한 메서드를 간단히 호출할 수 있는 기능을 제공합니다.
2.1. GET 요청
GET 요청은 주로 서버에서 데이터를 가져올 때 사용됩니다. requests.get() 메서드를 사용하여 GET 요청을 보낼 수 있습니다.
import requests
# GET 요청 보내기
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
# 응답 상태 코드 확인
print(response.status_code) # 출력: 200
# 응답 본문 확인
print(response.text)
위 코드에서는 jsonplaceholder.typicode.com의 테스트 API에 GET 요청을 보내고, 응답 상태 코드와 본문을 출력합니다.
2.2. POST 요청
POST 요청은 주로 서버에 데이터를 전송할 때 사용됩니다. requests.post() 메서드를 사용하여 POST 요청을 보낼 수 있습니다.
import requests
# POST 요청에 사용할 데이터
data = {
'title': 'foo',
'body': 'bar',
'userId': 1
}
# POST 요청 보내기
response = requests.post('https://jsonplaceholder.typicode.com/posts', json=data)
# 응답 상태 코드 확인
print(response.status_code) # 출력: 201
# 응답 본문 확인
print(response.json())
위 코드에서는 POST 요청을 보내어 새로운 리소스를 생성합니다. json 매개변수를 사용하여 데이터를 JSON 형식으로 전송합니다.
2.3. PUT 요청
PUT 요청은 주로 서버의 기존 데이터를 수정할 때 사용됩니다. requests.put() 메서드를 사용하여 PUT 요청을 보낼 수 있습니다.
import requests
# PUT 요청에 사용할 데이터
data = {
'id': 1,
'title': 'foo',
'body': 'bar',
'userId': 1
}
# PUT 요청 보내기
response = requests.put('https://jsonplaceholder.typicode.com/posts/1', json=data)
# 응답 상태 코드 확인
print(response.status_code) # 출력: 200
# 응답 본문 확인
print(response.json())
위 코드에서는 기존 리소스를 수정하기 위해 PUT 요청을 보냅니다.
2.4. DELETE 요청
DELETE 요청은 주로 서버에서 데이터를 삭제할 때 사용됩니다. requests.delete() 메서드를 사용하여 DELETE 요청을 보낼 수 있습니다.
import requests
# DELETE 요청 보내기
response = requests.delete('https://jsonplaceholder.typicode.com/posts/1')
# 응답 상태 코드 확인
print(response.status_code) # 출력: 200
위 코드에서는 특정 리소스를 삭제하기 위해 DELETE 요청을 보냅니다.
3. HTTP 요청에 대한 응답 처리
HTTP 요청을 보낸 후, 서버로부터 응답을 받게 됩니다. requests 라이브러리는 다양한 방식으로 응답을 처리할 수 있는 기능을 제공합니다.
3.1. 응답 상태 코드 확인
HTTP 요청의 응답 상태 코드를 확인하여 요청이 성공했는지 여부를 알 수 있습니다.
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.status_code) # 200 (성공)
3.2. 응답 본문 확인
응답 본문은 다양한 형식으로 제공될 수 있으며, requests는 이를 텍스트, JSON 등으로 처리할 수 있습니다.
# 텍스트 형식으로 응답 본문 확인
print(response.text)
# JSON 형식으로 응답 본문 확인
print(response.json())
3.3. 응답 헤더 확인
응답 헤더는 서버에서 전송된 메타데이터를 포함합니다. response.headers를 사용하여 응답 헤더를 확인할 수 있습니다.
print(response.headers)
4. HTTP 요청에 추가 옵션 사용하기
requests 라이브러리는 HTTP 요청에 다양한 옵션을 추가할 수 있는 기능을 제공합니다. 여기에는 쿼리 매개변수, 헤더, 인증, 타임아웃 등이 포함됩니다.
4.1. 쿼리 매개변수 전달
GET 요청에 쿼리 매개변수를 전달하려면 params 매개변수를 사용합니다.
import requests
# 쿼리 매개변수 사용
params = {'userId': 1}
response = requests.get('https://jsonplaceholder.typicode.com/posts', params=params)
print(response.json())
위 코드에서는 특정 사용자의 게시물만 조회하기 위해 userId 쿼리 매개변수를 추가했습니다.
4.2. HTTP 헤더 추가
HTTP 요청에 헤더를 추가하려면 headers 매개변수를 사용합니다.
import requests
# 헤더 추가
headers = {'User-Agent': 'my-app/0.0.1'}
response = requests.get('https://jsonplaceholder.typicode.com/posts/1', headers=headers)
print(response.json())
4.3. 인증
HTTP 요청에서 기본 인증을 사용하려면 auth 매개변수를 사용합니다.
import requests
from requests.auth import HTTPBasicAuth
# 기본 인증 사용
response = requests.get('https://httpbin.org/basic-auth/user/pass', auth=HTTPBasicAuth('user', 'pass'))
print(response.status_code) # 200 (성공)
위 코드에서는 기본 인증을 사용하여 보호된 리소스에 접근합니다.
4.4. 타임아웃 설정
타임아웃을 설정하여 요청이 일정 시간 내에 완료되지 않으면 실패하도록 할 수 있습니다.
import requests
# 타임아웃 설정 (3초)
response = requests.get('https://httpbin.org/delay/5', timeout=3)
위 코드에서는 타임아웃을 3초로 설정하여, 3초 내에 응답이 없을 경우 예외를 발생시킵니다.
5. 오류 처리
HTTP 요청 중에 오류가 발생할 수 있으며, 이를 처리하기 위해 예외 처리 기법을 사용할 수 있습니다. requests 라이브러리는 다양한 예외를 제공하여 오류 상황을 관리할 수 있게 해줍니다.
5.1. 예외 처리 예제
import requests
try:
response = requests.get('https://nonexistentwebsite.com')
response.raise_for_status() # 오류가 발생하면 예외 발생
except requests.exceptions.HTTPError as errh:
print(f"Http Error: {errh}")
except requests.exceptions.ConnectionError as errc:
print(f"Error Connecting: {errc}")
except requests.exceptions.Timeout as errt:
print(f"Timeout Error: {errt}")
except requests.exceptions.RequestException as err:
print(f"OOps: Something Else {err}")
위 코드에서는 요청이 실패할 경우 발생할 수 있는 다양한 예외를 처리하여, 문제를 효과적으로 진단할 수 있습니다.
6. 세션을 통한 지속적인 연결
HTTP 세션을 사용하면 여러 요청 간에 쿠키와 연결 정보를 유지할 수 있습니다. 이는 로그인 세션과 같은 상태를 유지해야 하는 경우에 유용합니다.
6.1. 세션 사용 예제
import requests
# 세션 생성
session = requests.Session()
# 세션을 통한 로그인 (예시)
session.post('https://example.com/login', data={'username': 'user', 'password': 'pass'})
# 로그인 후 다른 요청
response = session.get('https://example.com/profile')
print(response.text)
위 코드에서는 세션을 사용하여 로그인 상태를 유지하면서 여러 요청을 수행합니다.
결론
이번 포스팅에서는 파이썬의 requests 라이브러리를 사용하여 HTTP 요청을 처리하는 방법에 대해 알아보았습니다. requests는 간단한 GET 요청
부터 POST, PUT, DELETE 요청, 그리고 인증과 오류 처리까지 다양한 HTTP 작업을 쉽게 처리할 수 있는 강력한 도구입니다. 이를 통해 웹 애플리케이션 개발, API 통신, 데이터 크롤링 등 다양한 작업을 효율적으로 수행할 수 있습니다.
이 글을 통해 파이썬의 requests 라이브러리를 활용하여 HTTP 요청을 처리하는 방법을 이해하고, 실습을 통해 이를 사용하는 방법을 익힐 수 있을 것입니다. requests 라이브러리를 활용해 다양한 웹 서비스를 자유롭게 다루며, 더욱 강력한 파이썬 애플리케이션을 개발해 보세요!
'PYTHON' 카테고리의 다른 글
파이썬에서의 JSON 데이터 처리 (0) | 2024.08.15 |
---|---|
파이썬과 Flask를 이용한 웹 애플리케이션 만들기 (0) | 2024.08.15 |
파이썬에서의 CSV 파일 처리 방법 (0) | 2024.08.15 |
파이썬과 SQLite를 이용한 데이터베이스 처리 (0) | 2024.08.15 |
파이썬의 assert 문 이해하기 (0) | 2024.08.15 |