1. requets 라이브러리란

 

requests는 Python을 사용하여 HTTP/1.1 요청을 보낼 수 있는 Apache2 라이선스가 적용 된 라이브러리입니다.

 

2. requests 설치 및 사용법

 

Python의 패키지 매니저 pip를 이용하여 requests를 설치합니다.

 

pip install requests

 

설치가 다 된 후 import 하여 사용합니다.

 

import requests

 

3. 사용법

참조 - https://realpython.com/python-requests/

 

Python's Requests Library (Guide) – Real Python

In this tutorial on Python's Requests library, you'll see some of the most useful features that Requests has to offer as well as ways to customize and optimize those features. You'll learn how to use requests efficiently and stop requests to external servi

realpython.com

 

1) GET Request

 

GET 메서드는 지정된 리로스에서 데이터를 가져오거나 검색하려고 한다는 것을 나타냅니다.

 

import requests

requests.get("https://wwwm.example.com")

 

2) Reponse

 

방금 전 코드와 같은 코드이지만 반환 값을 지정하여 속성과 동작을 살펴 볼 수 있습니다.

 

import requests

response = requests.get("https://www.example.com")

 

3) Status code

수집 할 수 있는 정보 중 하나는 상태 코드입니다. 이 것을 통해서 요청의 상태를 알 수 있습니다.

 

response.status_code

 

 

여기서 조건식을 사용해서 요청의 상태에 따라 정보를 나타낼 수도 있습니다.

if response.status_code == 200:
	print("success")
elif resposne.status_code == 404:
	print("fail")

 

 

위 과정을 단순화 할 수도 있습니다. 조건식에서 'response' 인스턴스를 사용하여 상태 코드가 400보다 작으면 True를 반환하고 아닐 시 False 값이 나오게 됩니다. 하지만 이 방법을 사용할 시 주의해야할 점이 있습니다. 주의해야할 점은 이 코드는 상태 코드가 같은지 판단하는 것이 아니라는 점입니다.

if response:
	print("success")
else:
	raise Exception(f"fail!! status code : {resposne.status_code}")

 

 

요청이 실패한 경우 예외를 발생하고 싶지만 'status_code'를 사용하고 싶지 않을 때 사용하는 방법입니다.

response.raise_for_status()

 

 

raise_for_stutus() 예시를 표현해보겠습니다.

import requests
import requets.exceptions import HTTPError

try:
	response = requests.get("https://www.example.com")
    reponse.raise_for_status()
    
except HTTPError as http_err:
	print(f"HTTP error occured : {http_err}")
    
except Exception as err:
	print(f"Other error occured : {err} ")
    
else:
	print("success")

 

 

4) Content

GET 요청의 응답에는 페이로드라 부르는 다양한 정보들을 가지고 있습니다. 'content'를 사용해서 응답의 내용을 볼 수 있습니다. 응답으로 byte로 온것을 볼 수 있습니다.

import requests

response = requests.get("https://www.example.com")

response.content

type(response.content)
<-- bytes -->

 

 

문자열로 보고 싶을 때는 'text'를 사용합니다.

response.text

type(response.text)
<-- str -->

 

 

'bytes'에서 'str'로 디코딩 할 때 인코딩 스키마가 필요합니다. 그래서 'requests'는 응답 헤더에 기반으로 인코딩을 추측하려고 합니다. 이 때 저희는 인코딩을 제공해 줄 수도 있습니다.

response.encoding = "UTF-8"

response.text

 

 

만약 응답으로 JSON을 받았다면 저희는 'json'을 사용해서 볼 수 있습니다.

response.json()

type(response.json())
<-- dict -->

 

 

JSON의 반환 형태는 dictionary 이기에 저희는 key 값을 통해서 value 값에 접근할 수 있습니다.

response_dict = response.json()

response_dict["sample"]

 

 

5) Header

응답 헤더는 응답 페이로드의 content type 및 응답을 cache하는 시간을 제한하는 정보와 같은 유용한 정보를 가지고 있습니다.

 

import requests

response = requests.get("https://www.example.com")
response.headers

 

 

key 값을 통해서 헤더에 접근 할 수 있습니다. 추가 적으로 헤더 객체는 대소문자를 구분하지 않습니다.

response.header["Content-Type"]
response.header["content-type"]

 

 

6) Query String Parameters

GET 요청을 사용자 지정하는 방법 중 하나에는 URL에 query string parameter을 통해 값을 전달하는 방법입니다.

import requests

response = requests.get(
			"https://www.example.com",
			params="{"q": "python", "sort": "stars", "oder": "desc"}, )
       
 json_response = response.json()
 popular_repositories = json_response["items"]
 
 for repo in popular_repositories[:3]:
	print(f"Name : {repo['name']}")
	print(f"Description : {repo['desription']}")
	print(f"stars : {repo['name']}")

 

 

방금과 같이 dictionary 형태로도 줄수 있고 튜플로도 줄수 있습니다.

requests.get(
		"https://www.example.com",
		[("q", "python"),("sort", "stars"),("order", "desc")], )

 

 

이렇게도 표현할 수 있습니다.

requests.get(
		"https://www.example.com",
		params=b"q=python&sort=stars&order=desc",)

+ Recent posts