메뉴 닫기

파이썬 requests 모듈로 HTTP 요청 보내기 완전 정복

파이썬 requests 모듈로 HTTP 요청 보내기 완전 정복

🌐 웹 크롤링과 API 통신에 필수, requests 모듈 제대로 활용하는 법

웹 개발을 하다 보면 외부 서버와 데이터를 주고받아야 하는 일이 자주 생깁니다.
특히 REST API를 호출하거나, 웹 페이지에서 정보를 수집할 때는 HTTP 요청을 간편하게 처리할 수 있는 도구가 필요하죠.
바로 이럴 때 꼭 알아둬야 하는 게 파이썬의 requests 모듈입니다.

requests는 GET, POST 등 다양한 요청 방식을 직관적으로 사용할 수 있고,
응답 데이터를 JSON으로 파싱하거나 헤더를 추가하는 작업도 매우 간단합니다.
복잡한 설정 없이도 빠르게 테스트할 수 있어 API 연동이나 웹 크롤링을 자주 하는 개발자라면 필수로 익혀야 할 라이브러리예요.
이번 글에서는 requests의 기본 사용법부터 실무에서 유용하게 쓰이는 기능들까지, 예제와 함께 하나씩 살펴볼게요.



🔗 requests란 무엇인가요?

파이썬에서 외부 웹 페이지나 API 서버와 통신하려면 HTTP 요청을 보내야 합니다.
이럴 때 가장 널리 쓰이는 모듈이 바로 requests입니다.
기본 내장 모듈인 urllib보다 훨씬 간결하고 직관적인 문법으로 설계되어 있어, 초보자부터 전문가까지 폭넓게 사용되고 있어요.

requests는 HTTP 프로토콜을 기반으로 동작하며, 다양한 요청 방식(GET, POST, PUT, DELETE 등)을 매우 쉽게 사용할 수 있습니다.
또한 요청 시 헤더, 쿠키, 파라미터를 추가하거나, 응답으로 받은 JSON 데이터를 파싱하는 작업도 단 몇 줄로 처리할 수 있다는 점이 가장 큰 장점입니다.

  • 🌐웹 API 호출 시 requests 모듈이 가장 널리 사용됩니다
  • ⚙️GET, POST, PUT, DELETE 모두 지원합니다
  • 📦응답 객체에서 JSON, 텍스트, 상태코드 등 다양한 정보 접근 가능

requests 모듈은 pip install requests 명령어로 설치할 수 있으며, 대부분의 웹 연동 프로젝트에서 사실상 필수처럼 쓰이는 핵심 라이브러리입니다.
웹 크롤링, 외부 시스템 연동, 자동화 스크립트 작성 등 다양한 분야에서 활용되고 있기 때문에 한 번 익혀두면 평생 쓸 수 있는 기술이라고 해도 과언이 아닙니다.

🛠️ GET과 POST 요청 기본 사용법

requests 모듈을 활용한 HTTP 요청은 문법이 매우 직관적입니다.
특히 자주 사용되는 GET과 POST 방식은 한두 줄만으로도 쉽게 구현할 수 있어서 다양한 API 연동 작업에 효율적입니다.

GET 방식은 데이터를 URL에 포함해 요청하고, POST는 데이터를 요청 본문(body)에 담아 보냅니다.
아래 예제를 보시면 바로 감이 오실 거예요.

CODE BLOCK
import requests

# GET 요청
res = requests.get("https://jsonplaceholder.typicode.com/posts/1")
print(res.status_code)
print(res.json())

# POST 요청
data = {"title": "foo", "body": "bar", "userId": 1}
res = requests.post("https://jsonplaceholder.typicode.com/posts", json=data)
print(res.status_code)
print(res.json())

GET 요청에서는 URL만 지정하면 되고, POST 요청에서는 json 매개변수를 사용해 데이터를 보낼 수 있습니다.
요청 결과는 res.status_code로 응답 상태를 확인하고, res.json()으로 JSON 데이터를 파싱할 수 있어요.

💡 TIP: POST 요청에서 json=datadata=data는 다릅니다. json=data는 자동으로 Content-Type을 application/json으로 설정해줍니다.

이처럼 requests는 복잡한 설정 없이도 기본적인 요청 처리를 빠르고 정확하게 해줍니다.
실제로 많은 API 문서에서 curl 명령어와 함께 requests 예제를 함께 제공하는 경우도 많을 만큼 실무에서 널리 사용되고 있죠.



⚙️ 헤더 추가와 쿼리 파라미터 활용

외부 API를 사용할 때는 인증 토큰, 사용자 에이전트, 콘텐츠 타입 등을 요청 헤더에 포함해야 하는 경우가 많습니다.
또한 특정 데이터를 필터링하려면 쿼리 파라미터(Query Params)를 함께 전달해야 하죠.
requests는 이러한 작업도 매우 간단하게 처리할 수 있습니다.

  • 🔐Authorization 헤더로 API 인증 토큰을 보낼 수 있습니다
  • 🔍params 키워드로 쿼리 스트링을 손쉽게 구성할 수 있습니다
  • 🧾헤더를 딕셔너리 형태로 추가해 Content-Type 지정도 가능합니다

아래 예제를 통해 헤더와 쿼리 파라미터를 어떻게 사용하는지 알아보겠습니다.

CODE BLOCK
import requests

# 헤더 정의
headers = {
    "Authorization": "Bearer YOUR_API_TOKEN",
    "User-Agent": "MyApp/1.0"
}

# 쿼리 파라미터 정의
params = {
    "search": "python",
    "limit": 5
}

# GET 요청에 헤더와 파라미터 포함
res = requests.get("https://api.example.com/data", headers=headers, params=params)
print(res.status_code)
print(res.json())

위 코드처럼 headersparams는 딕셔너리 형태로 선언하고 requests.get() 함수에 인자로 전달하면 됩니다.
이 방식은 복잡한 URL 문자열을 직접 조합할 필요 없이 자동으로 요청이 구성되기 때문에 매우 편리합니다.

💎 핵심 포인트:
API 인증이나 필터링 요청은 거의 항상 헤더와 파라미터 조합이 필요합니다. requests는 이를 가장 깔끔한 문법으로 처리할 수 있게 도와줍니다.

🔌 응답 처리와 JSON 파싱

HTTP 요청을 보낸 후에는 서버로부터 응답(response)을 받아야 합니다.
requests 모듈은 응답 코드, 본문 내용, JSON 파싱 등 다양한 방식으로 응답을 쉽게 다룰 수 있도록 도와줍니다.
이 과정을 잘 이해하면 서버와의 통신에서 오류를 줄이고, 데이터를 효율적으로 다룰 수 있어요.

응답 객체에는 다양한 속성이 포함되어 있습니다.
자주 사용하는 주요 항목은 다음과 같습니다.

  • 📮response.status_code : HTTP 상태 코드 (예: 200, 404, 500 등)
  • 📝response.text : 본문 전체 문자열
  • 🧾response.json() : JSON 응답을 파이썬 dict로 변환

아래 예제를 보면 실제 응답 객체를 다루는 방식이 한눈에 들어올 거예요.

CODE BLOCK
import requests

res = requests.get("https://jsonplaceholder.typicode.com/posts/1")

print("상태 코드:", res.status_code)
print("본문 내용:", res.text)
print("JSON 파싱:", res.json())

res.json()은 응답 데이터가 JSON 형식일 경우에만 사용할 수 있으며, 파싱이 실패하면 예외가 발생합니다.
따라서 가급적 res.headers[“Content-Type”]를 먼저 확인하거나 try-except 문으로 감싸는 것이 안전합니다.

💡 TIP: 상태 코드가 200이 아니면 오류가 발생한 것이므로 response.raise_for_status()를 사용해 예외 처리를 자동화할 수 있어요.



💡 실무에서 유용한 requests 팁

기본적인 GET, POST 요청만으로도 대부분의 작업이 가능하지만, 실무에서는 더 섬세한 제어가 필요한 경우가 많습니다.
requests 모듈은 이러한 상황을 위한 고급 기능과 유틸리티도 잘 갖추고 있어요.
아래 팁들을 활용하면 보다 안정적이고 유연한 HTTP 통신이 가능합니다.

  • timeout을 지정해 서버 응답 지연 시 프로그램 멈춤을 방지할 수 있습니다
  • 🔁세션 객체를 사용하면 쿠키와 헤더를 공유하며 여러 요청을 보낼 수 있어요
  • 🔄응답 캐싱을 직접 구현하거나 retry 로직을 추가해 안정성을 높일 수 있습니다

아래 예시는 timeoutSession 객체를 사용하는 방법을 함께 보여줍니다.

CODE BLOCK
import requests

# 세션 객체 생성
session = requests.Session()
session.headers.update({"Authorization": "Bearer YOUR_API_KEY"})

try:
    res = session.get("https://api.example.com/data", timeout=5)
    print(res.json())
except requests.exceptions.Timeout:
    print("요청 시간이 초과되었습니다.")

위처럼 requests.Session()을 사용하면 여러 요청 간에 공통 헤더나 쿠키 정보를 재사용할 수 있어 API 호출 최적화에 유리합니다.
또한 timeout을 적절히 설정하면 서버 장애로 인한 프로그램 정지를 막을 수 있어요.

💎 핵심 포인트:
실제 서비스나 자동화 프로그램에서는 세션, 타임아웃, 예외 처리가 안정성을 좌우합니다. 기본기 외에도 꼭 익혀두세요.

❓ 자주 묻는 질문 (FAQ)

requests는 파이썬에 기본 포함되어 있나요?
아니요, 기본 내장 모듈은 아니며 pip install requests로 설치해야 사용 가능합니다.
GET 요청과 POST 요청은 언제 쓰나요?
GET은 데이터를 조회할 때, POST는 데이터를 생성하거나 전달할 때 주로 사용됩니다.
json과 data 매개변수는 무슨 차이가 있나요?
json은 JSON 형태로 데이터를 전송하며, Content-Type을 자동 설정해줍니다. data는 일반 폼 전송에 사용됩니다.
요청 실패 시 자동 재시도 기능은 있나요?
기본은 아니지만 urllib3의 Retry 객체와 함께 사용할 수 있습니다. requests.adapters.HTTPAdapter를 참고하세요.
비동기로 요청을 보내려면 어떻게 하나요?
requests는 동기 방식입니다. 비동기 요청이 필요하다면 httpx 또는 aiohttp를 사용하는 것이 좋습니다.
응답이 JSON이 아닌 경우는 어떻게 처리하나요?
res.textres.content를 사용해 텍스트나 바이너리 형태로 직접 다루어야 합니다.
헤더에 한글을 포함해도 되나요?
권장되지 않습니다. 헤더에는 ASCII 문자만 포함하는 것이 안전하며, 필요한 경우 URL 인코딩을 활용하세요.
로그인을 자동화할 수도 있나요?
가능합니다. 로그인 요청을 POST로 보내고 세션 쿠키를 유지하면 이후 요청에서도 로그인 상태를 유지할 수 있습니다.

🧾 requests 모듈로 API와 웹 통신 완전 정복

파이썬의 requests 모듈은 간결한 문법과 다양한 기능 덕분에 HTTP 통신 작업을 훨씬 효율적으로 만들어줍니다.
GET과 POST 요청은 물론, 헤더 추가, 파라미터 처리, JSON 파싱까지 기본기만 잘 익혀도 외부 API와의 연동이 훨씬 수월해지죠.
또한 timeout 설정, 세션 객체 활용, 예외 처리 등 실무에서 자주 겪는 문제들도 requests만으로 대부분 해결할 수 있습니다.
특히 웹 크롤링이나 백엔드 API 통합, 자동화 스크립트 제작 같은 작업에 requests는 사실상 표준 도구처럼 쓰이기 때문에 꼭 익혀두는 것이 좋습니다.
이 글을 통해 기본부터 실전 팁까지 모두 다뤘으니, 이제 여러분도 requests를 활용한 API 통신에 자신감을 가질 수 있을 거예요.


🏷️ 관련 태그 : 파이썬, requests모듈, RESTAPI, 웹크롤링, HTTP요청, GETPOST요청, API통신, json파싱, 파이썬자동화, 백엔드연동