Search

requests

대분류
라이브러리
소분류
Python Module
유형
HTTP REST
주요 레퍼런스
https://light-tree.tistory.com/6
모듈 분류
외장
최종 편집 일시
2024/10/27 15:31
생성 일시
2024/07/22 01:06
13 more properties

설명

HTTP RESTapi 통신 라이브러리

설치

> python -m pip install --upgrade pip > pip install requests
SQL
복사

★참고 자료

RESTAPI

방식

GET 방식: requests.get()
POST 방식: requests.post()
PUT 방식: requests.put()
DELETE 방식: requests.delete()

★요청 헤더

인증 토큰(JWT: JSON WEB TOKENs)

유저를 인증하고 식별하기 위한 토큰(Token) 기반 인증
토큰 자체에 사용자의 권한 정보나 서비스를 사용하기 위한 정보가 포함
RESTful과 같은 무상태(Stateless)인 환경에서 사용자 데이터를 주고받을 수 있게 된다.
세션(Session)을 사용하게 될 경우 쿠키 등을 통해 사용자를 식별하고 서버에 세션을 저장했지만, 토큰을 클라이언트에 저장하고 요청시 HTTP 헤더에 토큰을 첨부하는 것만으로도 단순하게 데이터를 요청하고 응답받을 수 있다.
requests.post("https://jsonplaceholder.typicode.com/users", headers={'Authorization': 'Bearer 12345'}) # <Response [201]>
Python
복사

User-Agent

블로그에서 블로그 관리 기능이 있는데, 여기서 어떤 사람이 어떤 디바이스(PC 또는 모바일이나 태블릿 등)에서 블로그에 방문했는 지 알 수 있습니다.
이 때 확인하게 되는 값이 바로 이 User-Agent 값
url = "https://domdom.tistory.com" headers = { "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36" } response = requests.get(url, headers=headers) response.raise_for_status() response.status_code # 200
Python
복사

Referer

Referer를 참조함으로써 현재 표시 하는 웹페이지가 어떤 웹페이지에서 요청되었는지 알수 있다.
어떤 웹사이트나 웹서버에서 방문자가 왔는지를 파악할수 있는 기능 제공
custom_header = { "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36", "referer": "https://pann.ante.com/" } url = "https://pann.nate.com/talk/350939697" response = requests.get(url, headers=custom_header) response.raise_for_status() response.status_code # 200
Python
복사

메서드 → 객체

requests.get()

get method로 데이터 보내기
import requests # 1. 직접 입력해서 보내기 # url에 보내고자 하는 데이터를 입력해서 전송한다. URL = "http://google.com?user=comp&num=42" response = requests.get(URL) print("status code :", response.status_code) # 2. dict 이용하기 param = { "user" : "comp", "num" : 42 } response = requests.get(URL, params=param) print("status code :", response.status_code)
Python
복사

옵션 : timeout=int

체류 시간 조정
requests.get('https://github.com/', timeout=0.001) ''' Traceback (most recent call last): File "<stdin>", line 1, in <module> requests.exceptions.Timeout: HTTPConnectionPool(host='github.com', port=80): Request timed out. (timeout=0.001) '''
Python
복사

requests.post()

data 옵션을 사용하면, html 양식(form) 포맷의 데이터를 전송할 수 있고, json 또한 사용가능
이 외에도 files 옵션을 통해 file을 전송할 수 있다.
import requests, json URL = "https://google.com" # data with json data = {"outer": {"inner": "value"}} response = requests.post(URL, data=data) response = requests.post(URL, data=json.dumps(data)) # json response = requests.post(URL, json={"name": "test"}) # files files = {'file': open('report.xls', 'rb')} r = requests.post(url, files=files)
Python
복사

requests.put()

requests.delete()

Response객체

.status_code

get(), post(), put(), delete()를 통해 반환된 response 객체의 상태 코드를 반환
import requests response = requests.get("https://google.com") response.status_code # 200 response = requests.get("https://google.com/user/") response.status_code # 404
Python
복사

.json()

json response일 경우 딕셔너리 타입으로 변환
response.json() ''' type = list타입 [{'userId': 1, 'id': 1, 'title': 'sunt aut facere repellat provident... '''
Python
복사

.content

content 속성을 통해 바이너리 타입으로 데이터 획득
response.content # b'[\n {\n "userId": 1,\n "id": 1,\n "title": "sunt aut facere...
Python
복사

.text

text 속성을 통해 UTF-8로 인코딩된 문자열 획득
response.text ''' type = string타입 [ { "userId": 1, "id": 1, "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto" }, { "userId": 1, "id": 2, "title": "qui est esse", "body": "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\nqui aperiam non debitis possimus qui neque nisi nulla" }, { ... '''
Python
복사

.encoding

인코딩 정보 확인
response.encoding # 'utf-8'
Python
복사

.cookies

쿠키 정보 확인
response.encoding ''' <RequestsCookieJar[Cookie(version=0, name='AEC', value='AVYB7co6OE2VJXuR5HetwhipEUY7JLiZRJM_9I7dpog_beMKxJbtDRlMdqQ', port=None, port_specified=False, domain='.google.com', domain_specified=True, domain_initial_dot=True, path='/', path_specified=True, secure=True, expires=1735744104, discard=False, comment=None, comment_url=None, rest={'HttpOnly': None, 'SameSite': 'lax'}, rfc2109=False), Cookie(version=0, name='NID', value='515=DNJg5hxH9WmHT8MAz7e9s5sX2pAYSUXFm8Zf8RalUgGDpMPZjfTH_4wx241gvbvdLF8P-NILJCZi_H_l7_5D_iafOkE4ycksdfeVKEKrXmT2wbUOluzVYsa3njLxhXE9PlxOcwsj6wq-2IL4Hj4V04pcmoPgpO1dlSL5WUHE1E4', port=None, port_specified=False, domain='.google.com', domain_specified=True, domain_initial_dot=True, path='/', path_specified=True, secure=False, expires=1736003304, discard=False, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False)]> '''
Python
복사

.headers

응답 헤더 정보 확인
response.headers ''' {'Date': 'Fri, 05 Jul 2024 15:08:24 GMT', 'Content-Type': 'application/json; charset=utf-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Report-To': '{"group":"heroku-nel","max_age":3600,"endpoints":[{"url":"https://nel.heroku.com/reports?ts=1712918402&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&s=xAoN3%2BFLwwlW4nnwAu9KLRC%2FoxCzBfIVobCcPI25AQQ%3D"}]}', 'Reporting-Endpoints': 'heroku-nel=https://nel.heroku.com/reports?ts=1712918402&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&s=xAoN3%2BFLwwlW4nnwAu9KLRC%2FoxCzBfIVobCcPI25AQQ%3D', 'Nel': '{"report_to":"heroku-nel","max_age":3600,"success_fraction":0.005,"failure_fraction":0.05,"response_headers":["Via"]}', 'X-Powered-By': 'Express', 'X-Ratelimit-Limit': '1000', 'X-Ratelimit-Remaining': '999', 'X-Ratelimit-Reset': '1712918419', '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': '16787', 'Server': 'cloudflare', 'CF-RAY': '89e8452acda053e7-ATL', 'Content-Encoding': 'gzip', 'alt-svc': 'h3=":443"; ma=86400'} ''' response.headers['Content-Type'] # 'application/json; charset=utf-8'
Python
복사