requests란?

-requests 파이썬으로 HTTP 통신이 필요한 프로그램을 작성할 때 가장 많이 사용되는 라이브러리입니다.

어떤 방식의 HTTP요청을 하는 지에 따라서 다른 함수를 사용한다.

requests.get()
requests.post()
requests.put()
requests.delete()

사용법 및 예제

pip install requests  // 패키지 설치
  • requests를 이용하여 api를 get으로 요청하고 데이터를 받아오는 코드이다.
import requests # requests 라이브러리 설치 필요

r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')
rjson = r.json()

gus = rjson['RealtimeCityAir']['row']

for gu in gus:
	print(gu['MSRSTE_NM'], gu['IDEX_MVL'])

응답 상태

  • 상태 코드는 응답 객체의 status_code 속성을 통해 간단하게 얻을 수 있습니다.
>>> response = requests.get("https://jsonplaceholder.typicode.com/users/1")
>>> response.status_code
200
>>> response = requests.get("https://jsonplaceholder.typicode.com/users/100")
>>> response.status_code
404
>>> response = requests.post("https://jsonplaceholder.typicode.com/users")
>>> response.status_code
201

응답 전문

-요청이 정상적으로 처리가 된 경우, 응답 전문(response body/payload)에 요청한 데이터가 담겨져 옵니다. 응답 전문은 크게 3가지 방식으로 읽어올 수 있습니다.

첫 번째는 content 속성을 통해 바이너리 원문을 얻을 수 있습니다.

 response = requests.get("https://jsonplaceholder.typicode.com/users/1")
 response.content

두 번째는 text 속성을 통해 UTF-8로 인코딩된 문자열을 얻을 수 있습니다.

response.text

마지막으로, 응답 데이터가 JSON 포멧이라면 json() 함수를 통해 사전(dictionary) 객체를 얻을 수 있습니다.

response.json()

응답 헤더

  • 응답에 대한 메타 데이터를 담고 있는 응답 헤더는 headers 속성을 통해 사전의 형태로 얻을 수 있습니다.
response = requests.get("https://jsonplaceholder.typicode.com/users/1")
response.headers
>>> {'Date': 'Sat, 12 Dec 2020 21:10:49 GMT', 'Content-Type': 'application/json; charset=utf-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Set-Cookie': '__cfduid=d92df672c0d58b06b245dd0b8d317e2141607807449; expires=Mon, 11-Jan-21 21:10:49 GMT; path=/; domain=.typicode.com; HttpOnly; SameSite=Lax', 'X-Powered-By': 'Express', 'X-Ratelimit-Limit': '1000', 'X-Ratelimit-Remaining': '999', 'X-Ratelimit-Reset': '1607798104', 'Vary': 'Origin, Accept-Encoding', 'Access-Control-Allow-Credentials': 'true', 'Cache-Control': 'max-age=43200', 'Pragma': 'no-cache', 'Expires': '-1', 'X-Content-Type-Options': 'nosniff', 'Etag': 'W/"1fd-+2Y3G3w049iSZtw5t1mzSnunngE"', 'Via': '1.1 vegur', 'CF-Cache-Status': 'HIT', 'Age': '9352', 'cf-request-id': '06fa63d142000038668b9a7000000001', 'Expect-CT': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', 'Report-To': '{"endpoints":[{"url":"https:\\/\\/a.nel.cloudflare.com\\/report?s=Vk2e8Q%2FBK4wOSQc12Cgs0nqvZHpyUb4c0o%2BWCgLzwdqPLQM2HJ5hNHW%2Fmc8fNr73wqQ2LrzEdScfv5bejTYVrXRlUfAyPcGnv1me%2BHlZKc7IKKOi%2BO%2ButGVrdkWS"}],"group":"cf-nel","max_age":604800}', 'NEL': '{"report_to":"cf-nel","max_age":604800}', 'Server': 'cloudflare', 'CF-RAY': '600a6f2edfe23866-IAD', 'Content-Encoding': 'gzip'}

response.headers['Content-Type']
>>>'application/json; charset=utf-8'

요청 쿼리

-GET으로 보낼 때 보통 params 옵션을 사용하면 쿼리 스크링을 사전의 형태로 넘길 수 있습니다.

response = requests.get("https://jsonplaceholder.typicode.com/posts", params={"userId": "1"})
[post["id"] for post in response.json()]
>>> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

요청 전문

  • POST나 PUT 방식으로 HTTP 요청을 할 때는 보통 요청 전문(request body/payload)에 데이터를 담아서 보내는데요. data 옵션을 사용하면, HTML 양식(form) 포멧의 데이터를 전송할 수 있으며, 이 때 Content-Type 요청 헤더는 application/x-www-form-urlencoded로 자동 설정됩니다.
requests.post("https://jsonplaceholder.typicode.com/users", data={'name': 'Test User'})

json 옵션을 사용하면, REST API로 JSON 포멧의 데이터를 전송할 수 있으며, 이 때 Content-Type 요청 헤더는 application/json로 자동 설정됩니다.

requests.post("https://jsonplaceholder.typicode.com/users", json={'name': 'Test User'})

요청 헤더

  • headers 옵션을 사용하면 요청 헤더도 직접 설정할 수 있는데요. 인증 토큰을 보낼 때 유용하게 사용할 수 있습니다.
requests.post("https://jsonplaceholder.typicode.com/users", headers={'Authorization': 'Bearer 12345'})

'python' 카테고리의 다른 글

[Python] 파이썬 jinja2란?  (0) 2022.06.30
[Python]f-string formatting  (0) 2022.06.29
[Python]파이썬에서 Flask 프레임워크 사용  (0) 2022.06.29
[Python]PyJWT 파이썬에서 JWT 사용하기  (0) 2022.06.29
[Python] PyMongo(MongoDB)  (0) 2022.06.29
복사했습니다!