Python에서 HTTP 요청을 보내는 가장 간단하고 효율적인 방법 중 하나는 `requests` 모듈을 사용하는 것입니다. 이 모듈을 사용하면 웹 페이지, API 등과의 통신을 쉽게 처리할 수 있습니다. 이 글에서는 `requests` 모듈을 설치하고 사용하는 방법부터 다양한 기능까지 알아보겠습니다.
## 1. requests 모듈 설치하기
requests 모듈은 기본적으로 Python에 포함되어 있지 않기 때문에 먼저 설치해야 합니다.
```bash
pip install requests
```
## 2. GET 요청 보내기
가장 기본적인 HTTP 메서드 중 하나인 GET 요청은 서버로부터 정보를 가져올 때 사용됩니다. 예를 들어, 웹 페이지의 HTML 콘텐츠를 가져오거나, API 엔드포인트에서 데이터를 가져올 때 사용됩니다.
```python
import requests
response = requests.get('https://jsonplaceholder.typicode.com/posts')
print(response.text) # 응답 내용을 출력합니다.
```
`response.text`는 서버로부터 받은 응답을 텍스트로 반환하며, `response.status_code`는 HTTP 상태 코드를 반환합니다.
## 3. POST 요청 보내기
POST 요청은 주로 서버에 데이터를 전송할 때 사용됩니다. 예를 들어, 사용자가 폼에 입력한 데이터를 서버로 전송하거나, API에 새로운 리소스를 생성할 때 사용됩니다.
```python
url = 'https://jsonplaceholder.typicode.com/posts'
data = {
'title': 'foo',
'body': 'bar',
'userId': 1
}
response = requests.post(url, json=data)
print(response.json()) # 응답 내용을 JSON으로 출력합니다.
```
여기서 `json=data`는 `requests` 모듈이 JSON 형식으로 데이터를 전송하도록 해줍니다.
## 4. 요청 헤더 설정하기
특정 헤더를 추가하여 요청을 보내야 할 때가 있습니다. 예를 들어, API 키를 포함하거나 특정 데이터 형식을 요청할 때가 있습니다.
```python
headers = {
'Authorization': 'Bearer your_api_key_here',
'Content-Type': 'application/json'
}
response = requests.get('https://jsonplaceholder.typicode.com/posts', headers=headers)
print(response.status_code)
```
헤더는 딕셔너리 형식으로 전달하며, `Content-Type`과 같은 헤더를 이용해 요청의 형식을 지정할 수 있습니다.
## 5. URL 파라미터 추가하기
GET 요청 시 특정 파라미터를 URL에 추가하여 쿼리를 보낼 수 있습니다.
```python
params = {'userId': 1}
response = requests.get('https://jsonplaceholder.typicode.com/posts', params=params)
print(response.json())
```
위의 코드에서는 `userId=1`이라는 파라미터를 URL에 추가하여 서버로 요청을 보냅니다.
## 6. 응답 데이터 처리하기
`requests` 모듈을 통해 받은 응답은 다양한 방식으로 처리할 수 있습니다.
- `response.text` - 텍스트 형식으로 응답을 반환합니다.
- `response.json()` - JSON 형식의 응답을 Python 딕셔너리로 변환해 반환합니다.
- `response.content` - 바이너리 형식으로 응답을 반환합니다.
```python
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.json()) # JSON 응답을 딕셔너리로 변환하여 출력
```
## 7. 파일 다운로드하기
파일을 다운로드할 때도 `requests` 모듈을 사용할 수 있습니다.
```python
url = 'https://example.com/somefile.zip'
response = requests.get(url, stream=True)
with open('somefile.zip', 'wb') as file:
for chunk in response.iter_content(chunk_size=8192):
file.write(chunk)
```
여기서 `stream=True` 옵션을 통해 응답을 스트리밍 방식으로 받아와서 파일에 쓰기 작업을 합니다.
## 8. 예외 처리하기
네트워크 요청은 항상 성공하는 것이 아니기 때문에 예외 처리가 중요합니다. `requests` 모듈에서 발생하는 일반적인 예외를 처리하는 방법을 알아보겠습니다.
```python
try:
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
response.raise_for_status() # 상태 코드가 200이 아닌 경우 예외를 발생시킵니다.
except requests.exceptions.HTTPError as errh:
print("HTTP 에러:", errh)
except requests.exceptions.ConnectionError as errc:
print("연결 에러:", errc)
except requests.exceptions.Timeout as errt:
print("타임아웃 에러:", errt)
except requests.exceptions.RequestException as err:
print("요청 에러:", err)
```
`raise_for_status()` 메서드는 상태 코드가 200이 아닌 경우 예외를 발생시켜 오류를 쉽게 처리할 수 있게 해줍니다.
## 9. 세션(Session) 사용하기
세션을 사용하면 여러 번의 요청에 대해 쿠키나 헤더 정보를 유지할 수 있습니다. 예를 들어, 로그인 세션을 유지해야 할 때 유용합니다.
```python
session = requests.Session()
session.headers.update({'Authorization': 'Bearer your_api_key_here'})
response = session.get('https://jsonplaceholder.typicode.com/posts')
print(response.json())
```
## 마무리
Python의 `requests` 모듈은 간편하고 강력한 HTTP 요청 도구로, 다양한 기능을 제공하여 복잡한 네트워크 요청도 쉽게 처리할 수 있습니다. 이 가이드를 통해 `requests` 모듈을 활용한 웹 통신을 더욱 이해하고 효율적으로 사용할 수 있기를 바랍니다.
'파이썬 공부' 카테고리의 다른 글
Python QVBoxLayout 쉽게 이해하기: 위젯 추가, FixedHeight 설정 방법 (0) | 2024.11.11 |
---|---|
파이썬 구구단 게임 코드 (Python 구구단 만들기 코드) (0) | 2024.11.11 |
'FreeTypeFont' object has no attribute 'getsize' (Pillow 10, 11 에러 해결방법) (0) | 2024.11.09 |
[Python] 파이썬 Selenium 자주 검색하는 10가지 질문 ! selenium FAQ (3) | 2024.11.08 |
파이썬[Python] 폴더가 없으면 생성하는 방법 5가지 (create directory) (0) | 2024.08.04 |