CHHB stroy

🌐 Python Requests 완벽 가이드 본문

Python

🌐 Python Requests 완벽 가이드

CHHB 2025. 8. 7. 22:34

 

 

Python 개발자라면 반드시 알아야 할 필수 라이브러리!

requests는 웹 서버와 데이터를 주고받을 때 가장 많이 사용되는 HTTP 라이브러리입니다. 간결한 문법, 강력한 기능, 실무 적용 예시까지 모두 담았습니다.


📦 설치 방법

Python 패키지 관리자인 pip를 사용해 간단하게 설치할 수 있습니다.

pip install requests

📝 기본 사용법

아래 예제는 GET, POST 등 가장 많이 사용되는 HTTP 요청 방법을 보여줍니다.

import requests

# 1. GET 요청: 데이터를 가져오기
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print("Status Code:", response.status_code)
print("본문:", response.text)

# 2. POST 요청: 데이터 전송하기
data = {'title': 'foo', 'body': 'bar', 'userId': 1}
response = requests.post('https://jsonplaceholder.typicode.com/posts', json=data)
print("생성된 데이터:", response.json())

🏷️ 주요 기능별 예제

1. 쿼리스트링(GET 파라미터) 전달

URL에 직접 파라미터를 추가하는 대신 params 인자를 사용하면 훨씬 깔끔하게 코드를 작성할 수 있습니다.

params = {'userId': 1}
response = requests.get('https://jsonplaceholder.typicode.com/posts', params=params)
print(response.json())

2. 헤더(Header) 설정

요청에 필요한 헤더 정보를 딕셔너리 형태로 headers 인자에 전달합니다.

headers = {'User-Agent': '개발자 블로그/1.0'}
response = requests.get('https://httpbin.org/headers', headers=headers)
print(response.json())

3. 폼 데이터(Form Data) & 파일 업로드

data 인자로 폼 데이터를, files 인자로 파일을 전송할 수 있습니다.

# 폼 데이터 전송
data = {'key1': 'value1'}
response = requests.post('https://httpbin.org/post', data=data)
print(response.json())

# 파일 업로드
files = {'file': open('sample.txt', 'rb')}
response = requests.post('https://httpbin.org/post', files=files)
print(response.json())

4. 타임아웃 & 예외 처리

네트워크 문제 등으로 요청이 지연될 경우를 대비해 timeout을 설정하고 try-except 구문으로 예외를 처리하는 것이 좋습니다.

import requests.exceptions

try:
    response = requests.get('https://httpbin.org/delay/5', timeout=2)
    print(response.text)
except requests.exceptions.Timeout:
    print('⏰ 요청 시간이 초과되었습니다!')

5. 응답 JSON 파싱

서버 응답이 JSON 형식일 경우, response.json() 메서드를 사용해 딕셔너리로 바로 변환할 수 있습니다.

response = requests.get('https://jsonplaceholder.typicode.com/users/1')
user = response.json()
print(f"사용자명: {user['name']}")

6. 세션(Session) 활용

여러 요청에 걸쳐 동일한 쿠키, 헤더 등의 정보를 유지해야 할 때 Session 객체를 사용하면 효율적입니다.

with requests.Session() as session:
    session.headers.update({'Authorization': 'Bearer mytoken'})
    r1 = session.get('https://httpbin.org/headers')
    r2 = session.get('https://httpbin.org/cookies/set?choco=chip')
    print(r1.json(), r2.text)

🛠️ 실무에서 유용한 팁

  • User-Agent 설정: 웹 크롤링 시 필수적으로 설정해야 하며, 웹 서버가 봇 요청을 차단하는 것을 방지할 수 있습니다.
  • 응답 확인(response.ok): 요청이 성공했는지 (2xx 상태 코드)를 빠르게 판별할 수 있습니다.
  • 예외 처리: requests.exceptions.RequestException으로 다양한 네트워크 에러를 한 번에 처리할 수 있습니다.

❓ 자주 묻는 질문 (FAQ)

Q: requests로 동적(자바스크립트) 페이지도 가져올 수 있나요?

A: JS로 렌더링되는 데이터는 requests로 직접 수집이 불가하며, Selenium 또는 Playwright 등 브라우저 자동화 툴을 활용해야 합니다.

Q: HTTPS 인증서 검증을 끄려면?

A: requests.get(url, verify=False)를 사용합니다. 단, 보안 위험이 있으니 신뢰할 수 없는 페이지에는 사용하지 않는 것이 좋습니다.


📌 마무리

requests 라이브러리는 단순한 REST API 연동부터 실무 데이터 크롤링, 파일 업로드/다운로드, 인증 등 거의 모든 HTTP 관련 작업을 손쉽게 처리할 수 있습니다.

문법이 어렵지 않으니, 공식 문서와 위 예제들을 참고해 바로 실전에 활용해 보세요!

이 글이 도움이 되셨다면, 공감 버튼과 댓글 부탁드립니다! 😉