본문 바로가기
Python/python

파이썬 requests 모듈을 활용한 HTTP 요청 통신하기

by 노마드 산코디 2023. 10. 30.
728x90

안녕하세요! 오늘은 파이썬의 requests 모듈에 대한 내용을 다뤄보려 합니다. requests 모듈은 HTTP 요청을 보내고 웹 데이터를 가져오는 데 유용한 도구입니다. 이를 통해 웹 스크래핑, API 요청, 웹 서비스 테스트 등 다양한 웹 기반 작업을 수행할 수 있습니다. 함께 살펴볼 내용은 requests 모듈의 기본 사용법, 고급 기능, 보안 및 예외 처리 등 다양한 주제입니다. 그럼 시작해보겠습니다.

 

 

 




1. requests 모듈이란?

requests 모듈은 파이썬에서 HTTP 요청을 보내고 웹 서버로부터 데이터를 가져오는 기능을 제공하는 라이브러리입니다. 이 모듈을 사용하면 웹 페이지의 내용을 가져오거나, API로부터 데이터를 요청하고 응답을 처리하는 등 다양한 웹 기반 작업을 쉽게 수행할 수 있습니다. requests 모듈은 간편하고 직관적인 API를 제공하여 웹 요청 및 응답 처리를 단순화하고, HTTP 헤더, 쿠키, 세션 관리, 파일 업로드 등 다양한 기능을 지원합니다. 이로써 파이썬 프로그래머는 웹과 상호작용하는 데 용이한 도구를 사용할 수 있습니다.



모듈의 특징

  • 간편한 HTTP 요청 처리
    requests 모듈은 HTTP GET, POST, PUT, DELETE 등의 다양한 메서드로 간편하게 HTTP 요청을 보낼 수 있습니다.

  • 직관적인 API
    requests
     모듈은 직관적이고 사용하기 쉬운 API를 제공하여 사용자가 HTTP 요청 및 응답 처리를 쉽게 할 수 있도록 합니다.


  • 다양한 인증 방식 지원
    requests
    는 HTTP Basic 인증, OAuth 등 다양한 인증 방식을 지원하여 보안 요구사항을 충족합니다.


  • 세션 관리
    requests.Session 클래스를 사용하여 세션을 유지하고, 쿠키를 자동으로 관리할 수 있습니다.


  • HTTP 헤더 커스터마이징
    요청 및 응답 헤더를 쉽게 설정하고 읽을 수 있으며, 사용자 지정 헤더를 쉽게 추가할 수 있습니다.


  • 쿠키 처리
    쿠키를 쉽게 다룰 수 있으며, 쿠키를 저장하고 가져올 수 있습니다.


  • 파일 업로드
    파일을 업로드하고 다운로드하는 기능을 지원합니다.


  • 리다이렉션 관리
    리다이렉션을 자동으로 처리하거나 수동으로 제어할 수 있습니다.


  • 연결 풀링
    requests
     모듈은 HTTP 연결을 효율적으로 관리하며, 연결 풀을 사용하여 성능을 향상시킵니다.


  • 다양한 에러 처리
    다양한 HTTP 상태 코드와 네트워크 에러에 대한 예외 처리 기능을 제공하여 안정적인 웹 요청을 보장합니다.


  • 다양한 데이터 형식 지원
    JSON, XML, HTML 등 다양한 데이터 형식을 처리하고 파싱할 수 있습니다.


  • 모바일 기기와 호환
    모바일 애플리케이션과 함께 사용하기에 적합한 기능과 호환성을 제공합니다.

 

 

 

 


2. requests 모듈의 설치와 사용법



1. requests 모듈 설치하기
requests 모듈은 pip를 사용하여 설치할 수 있습니다. 명령 프롬프트나 터미널에서 다음 명령을 실행합니다.

pip install requests




2. requests 모듈 사용하기
requests 모듈을 사용하여 HTTP 요청을 보내고 응답을 처리하는 기본적인 예제를 살펴보겠습니다.

import requests

# GET 요청 보내기
response = requests.get('https://www.example.com')

# 응답의 상태 코드 확인
if response.status_code == 200:
    print('요청이 성공했습니다.')
    print('응답 데이터:', response.text)
else:
    print('요청이 실패했습니다. 상태 코드:', response.status_code)


위의 코드에서는 requests.get() 함수를 사용하여 GET 요청을 보내고, 응답 데이터를 response.text를 통해 확인합니다. 요청에 대한 응답의 상태 코드를 검사하여 요청이 성공적으로 처리되었는지 확인할 수 있습니다.



3. 추가 옵션과 헤더 설정
requests 모듈을 사용하여 요청에 추가 옵션을 설정하거나 헤더를 커스터마이징할 수 있습니다. 자세한 내용은 공식 문서를 참조하세요.



위와 같이 requests 모듈을 사용하면 간편하게 HTTP 요청을 보낼 수 있고, 서버로부터 받은 응답을 쉽게 처리할 수 있습니다.

 

 

 

 


3. HTTP 메서드

HTTP(HTTP Hypertext Transfer Protocol)는 웹 브라우저와 웹 서버 간에 데이터를 주고받기 위한 프로토콜입니다. HTTP는 다양한 메서드(또는 HTTP 동사)를 사용하여 서버에 요청을 보내고, 서버는 이러한 요청에 대한 응답을 반환합니다. 파이썬에서는 requests 모듈을 사용하여 다양한 HTTP 메서드를 지원합니다.


  • GET
    서버로부터 데이터를 가져올 때 사용하는 메서드입니다. 주로 정보를 요청할 때 사용하며, 요청한 데이터는 URL에 포함됩니다.


  • POST
    서버에 데이터를 제출할 때 사용하는 메서드입니다. 주로 양식(form) 데이터를 전송하거나 리소스를 생성하는 데 사용됩니다.


  • PUT
    서버에 데이터를 업데이트하거나 새로운 리소스를 생성할 때 사용하는 메서드입니다. 전체 엔티티를 교체합니다.


  • PATCH
    서버에 데이터의 일부를 업데이트할 때 사용하는 메서드입니다. 전체 엔티티를 교체하는 PUT과 달리 일부만 수정합니다.


  • DELETE
    서버에서 리소스를 삭제할 때 사용하는 메서드입니다. 해당 리소스를 삭제하는 데 사용됩니다.


  • HEAD
    서버에서 리소스의 헤더 정보만 가져올 때 사용하는 메서드입니다. 데이터의 내용은 가져오지 않습니다.


  • OPTIONS
    서버에서 지원하는 메서드 목록이나 특정 리소스의 사용 가능한 옵션을 확인하기 위한 메서드입니다.


  • CONNECT
    목적지에 대한 네트워크 연결을 설정하기 위해 사용하는 메서드로, 주로 프록시 서버와의 터널링에 사용됩니다.


  • TRACE
    서버에 의해 수행된 작업을 추적하기 위해 사용하는 메서드로, 주로 디버깅 용도로 활용됩니다.

 

HTTP 메서드는 요청의 목적과 의미에 따라 적절한 메서드를 선택하여 사용해야 합니다. 이러한 메서드는 웹 애플리케이션 개발 및 API 요청에 중요한 역할을 합니다.

 

 




4. 요청 헤더와 데이터

requests 모듈을 사용하여 HTTP 요청을 보낼 때, 요청 헤더와 데이터를 설정할 수 있습니다. 요청 헤더는 요청에 대한 부가 정보를 포함하고, 요청 데이터는 POST 또는 PUT과 같은 메서드를 사용할 때 서버로 전송하는 데이터를 나타냅니다.



1. 요청 헤더 설정
requests 모듈을 사용하여 요청 헤더를 설정할 때는 headers 매개변수를 활용합니다. 요청 헤더는 딕셔너리 형태로 전달됩니다.

import requests

headers = {
    'User-Agent': 'MyApp/1.0',  # 사용자 에이전트 설정
    'Authorization': 'Bearer <access_token>',  # 인증 토큰 설정
    'Accept': 'application/json'  # 응답 데이터 형식 설정
}

response = requests.get('https://example.com/api', headers=headers)




2. 요청 데이터 설정
HTTP POST 또는 PUT 요청과 함께 데이터를 전송해야 할 경우, data 또는 json 매개변수를 사용하여 요청 데이터를 설정할 수 있습니다.

import requests

# 데이터를 딕셔너리로 설정 (application/x-www-form-urlencoded 형식)
data = {
    'key1': 'value1',
    'key2': 'value2'
}

response = requests.post('https://example.com/api', data=data)

# JSON 데이터를 전송하는 경우
import json

data = {
    'key1': 'value1',
    'key2': 'value2'
}

response = requests.post('https://example.com/api', json=data)


data는 application/x-www-form-urlencoded 형식으로 데이터를 보내는 데 사용되고, json은 JSON 형식의 데이터를 보내는 데 사용됩니다.



요청 헤더와 데이터 설정을 통해 requests 모듈을 활용하여 다양한 HTTP 요청을 보낼 수 있으며, 이를 통해 원격 서버와의 통신을 다룰 수 있습니다.




 




5. requests 모듈의 활용 예제

requests 모듈은 다양한 웹 요청과 응답을 처리하는 기능을 제공하므로, 이를 사용하여 웹 서버와 상호 작용할 수 있는 다양한 활용 예제가 있습니다. 



1. GET 요청 보내기

import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.text)  # 웹 페이지 내용 출력


위의 코드는 주어진 URL에서 GET 요청을 보내고, 응답 내용을 출력합니다. 주어진 URL은 JSONPlaceholder API의 예제 엔드포인트를 사용하였습니다.



2. POST 요청 보내기

import requests

data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://httpbin.org/post', data=data)
print(response.text)


위의 코드는 주어진 URL로 POST 요청을 보내고, 데이터를 서버로 전송합니다. 응답은 서버에서 받은 데이터를 출력합니다.



3. JSON 데이터 전송하기

import requests
import json

data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://httpbin.org/post', json=data)
print(response.text)


위의 코드는 JSON 형식의 데이터를 서버로 POST 요청을 통해 전송합니다.


4. 헤더 설정하기

import requests

headers = {'User-Agent': 'MyApp/1.0'}
response = requests.get('https://jsonplaceholder.typicode.com/posts/1', headers=headers)
print(response.text)


위의 코드는 사용자 에이전트 헤더를 설정하여 GET 요청을 보냅니다.



5. 파일 업로드

import requests

files = {'file': ('example.txt', open('example.txt', 'rb'))}
response = requests.post('https://httpbin.org/post', files=files)
print(response.text)


위의 코드는 파일을 서버에 업로드하는 POST 요청을 보냅니다.



6. 세션 유지하기

import requests

# 세션 시작
session = requests.Session()
session.get('https://httpbin.org/cookies/set/sessioncookie/123456789')

# 동일한 세션으로 요청
response = session.get('https://httpbin.org/cookies')
print(response.text)


위의 코드는 세션을 유지하여 여러 요청 간에 쿠키 정보를 공유합니다.



requests 모듈은 다양한 웹 요청과 응답 처리를 지원하므로, 웹 스크래핑, API 호출, 웹 서비스와 상호 작용 등 다양한 웹 기반 프로젝트에서 활용할 수 있습니다.

 

 

 




6. requests 모듈 사용시 주의사항




1. 예외 처리 (Exception Handling)
웹 요청 시 네트워크 문제나 서버 오류 등 예외 상황을 처리해야 합니다. try/except 블록을 사용하여 예외를 처리하는 것이 좋습니다.

import requests

try:
    response = requests.get('https://example.com')
    response.raise_for_status()  # 응답이 200 OK가 아닌 경우 예외 발생
except requests.exceptions.RequestException as e:
    print(f'요청 오류: {e}')



2. 인코딩 처리
웹 서버가 다른 문자 인코딩을 사용하는 경우, 응답 데이터의 인코딩을 올바르게 처리해야 합니다. response.encoding 속성을 확인하고 필요한 경우 수동으로 설정합니다.

import requests

response = requests.get('https://example.com')
response.encoding = 'utf-8'  # 인코딩을 웹 사이트에 맞게 설정



3. 보안
requests 모듈을 사용하여 데이터를 전송할 때 민감한 정보(비밀번호, 토큰 등)를 함께 보내지 않도록 주의해야 합니다. 데이터를 안전하게 전송하기 위해 HTTPS를 사용하고, 민감한 정보는 안전하게 저장하고 관리해야 합니다.


4. HTTP 메서드
요청을 보낼 때 적절한 HTTP 메서드(GET, POST, PUT, DELETE 등)를 선택해야 합니다. 서버에 부적절한 메서드로 요청을 보내는 것은 보안 문제를 야기할 수 있습니다.


5. 사용자 에이전트 (User-Agent)
일부 웹 사이트는 사용자 에이전트 헤더를 검사하여 웹 스크레이퍼를 차단할 수 있습니다. 필요한 경우 사용자 에이전트를 설정하여 웹 사이트에 봇으로 인식되지 않도록 합니다.

import requests

headers = {'User-Agent': 'MyApp/1.0'}
response = requests.get('https://example.com', headers=headers)



6. API 키 및 인증
API를 사용하는 경우, API 키 또는 인증 토큰을 안전하게 관리하고 노출되지 않도록 주의합니다.


7. 블록되지 않게 하기
웹 스크래핑 봇이 웹 사이트에서 차단되는 것을 피하기 위해 로봇 배제 표준(robots.txt)을 준수하고, 요청 속도를 적절하게 조절합니다.

import requests
from time import sleep

url = 'https://example.com/data'
headers = {'User-Agent': 'MyBot/1.0'}

# 로봇 배제 표준 확인
response = requests.get(url, headers=headers)
if response.status_code == 200 and 'User-agent: *' in response.text:
    print('로봇 배제 표준을 준수하세요.')

# 요청 간격 설정
for i in range(10):
    response = requests.get(url, headers=headers)
    # ...

    sleep(1)  # 1초 간격으로 요청



8. 정규화된 URL 사용
URL을 구성할 때 정규화된 URL을 사용하여 중복 및 오류를 방지해야 합니다.

 

 

 

 


최종 정리

오늘은 파이썬 requests 모듈을 사용하여 HTTP 요청을 보내고 응답을 처리하는 방법에 대해 알아보았습니다. 이를 통해 웹 사이트에서 데이터를 가져오고 API와 상호작용하는 기초적인 방법을 정리하였습니다. requests 모듈은 웹 스크래핑, 데이터 수집, 웹 서비스와의 통신 등 다양한 웹 개발 작업에 유용하게 활용됩니다.

감사합니다.

 

728x90
반응형