본문 바로가기
파이썬 공부

Python Requests 모듈 사용법 가이드

by 파이썬코딩대학 2024. 11. 7.



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` 모듈을 활용한 웹 통신을 더욱 이해하고 효율적으로 사용할 수 있기를 바랍니다.