요청-퀵 가이드
Requests는 웹 애플리케이션에서 http 요청 / 응답을 처리하는 쉬운 기능을 제공하는 HTTP 라이브러리입니다. 라이브러리는 파이썬으로 개발되었습니다.
Python Requests의 공식 웹 사이트는 https://2.python-requests.org/en/master/ 다음과 같이 요청을 정의합니다-
Requests는 인간을 위해 만들어진 우아하고 간단한 Python 용 HTTP 라이브러리입니다.
요청의 특징
요청의 기능은 아래에서 설명합니다.
의뢰
파이썬 요청 라이브러리에는 Http 요청을 처리하는 데 사용할 수있는 사용하기 쉬운 메서드가 있습니다. 매개 변수를 전달하고 GET, POST, PUT, DELETE 등과 같은 요청 유형을 처리하는 것은 매우 쉽습니다.
응답
필요한 형식으로 응답을받을 수 있으며 지원되는 형식은 텍스트 형식, 바이너리 응답, json 응답 및 원시 응답입니다.
헤더
라이브러리를 사용하면 요구 사항에 따라 새 헤더를 읽거나 업데이트하거나 보낼 수 있습니다.
타임 아웃
시간 제한은 Python 요청 라이브러리를 사용하여 요청하는 URL에 쉽게 추가 할 수 있습니다. 타사 URL을 사용하고 있으며 응답을 기다리고있는 경우도 있습니다.
시간 초과로 인해 발생하는 응답 또는 오류로 URL이 해당 시간 초과 내에 응답하기를 원할 수 있으므로 항상 URL에 시간 초과를 제공하는 것이 좋습니다. 그렇게하지 않으면 해당 요청을 무기한 대기하게 될 수 있습니다.
오류 처리
요청 모듈은 오류 처리를 지원하며 그중 일부는 연결 오류, 시간 초과 오류, TooManyRedirects, Response.raise_for_status 오류 등입니다.
쿠키
라이브러리를 사용하면 요청 된 URL을 읽고, 쓰고, 업데이트 할 수 있습니다.
세션
데이터를 유지하려면 요청 사이에 세션이 필요합니다. 따라서 동일한 호스트가 반복해서 호출되면 TCP 연결을 다시 사용할 수 있으므로 성능이 향상됩니다.
SSL 인증서
SSL 인증서는 보안 URL과 함께 제공되는 보안 기능입니다. 요청을 사용하면 제공된 https URL에 대한 SSL 인증서도 확인합니다. SSL 확인은 요청 라이브러리에서 기본적으로 활성화되며 인증서가 없으면 오류가 발생합니다.
입증
HTTP 인증은 클라이언트가 URL을 요청할 때 사용자 이름, 비밀번호와 같은 일부 인증 정보를 요청하는 서버 측에 있습니다. 이는 클라이언트와 서버간에 교환되는 요청 및 응답에 대한 추가 보안입니다.
Python 요청 라이브러리 사용의 장점
다음은 Python 요청 라이브러리 사용의 장점입니다-
사용하기 쉽고 주어진 URL에서 데이터를 가져옵니다.
요청 라이브러리를 사용하여 웹 사이트에서 데이터를 스크랩 할 수 있습니다.
요청을 사용하여 주어진 URL에 대한 데이터를 가져오고, 게시하고, 삭제하고, 업데이트 할 수 있습니다.
쿠키 및 세션 처리는 매우 쉽습니다.
보안은 인증 모듈 지원의 도움으로도 처리됩니다.
이 장에서는 요청 설치에 대해 설명합니다. Requests 모듈 작업을 시작하려면 먼저 Python을 설치해야합니다. 그래서 우리는 다음 작업을 할 것입니다.
- Python 설치
- 설치 요청
Python 설치
Python 공식 사이트로 이동 : https://www.python.org/downloads/아래 그림과 같이 Windows, Linux / Unix 및 Mac OS에서 사용 가능한 최신 버전을 클릭하십시오. 사용 가능한 64 비트 또는 32 비트 OS에 따라 Python을 다운로드하십시오.
다운로드가 완료되면 .exe 파일을 클릭하고 단계에 따라 시스템에 python을 설치하십시오.
파이썬 패키지 관리자, 즉 pip도 위의 설치와 함께 기본적으로 설치됩니다. 시스템에서 전역 적으로 작동하도록하려면 Python 위치를 PATH 변수에 직접 추가하십시오. ADD to PATH 확인란을 선택하는 것을 기억하기 위해 설치 시작시 동일한 내용이 표시됩니다. 확인하는 것을 잊은 경우 아래 제공된 단계에 따라 PATH에 추가하십시오.
PATH에 추가하려면 다음 단계를 따르십시오.
컴퓨터 아이콘을 마우스 오른쪽 버튼으로 클릭하고 속성> 고급 시스템 설정을 클릭합니다.
아래와 같이 화면이 표시됩니다.
위와 같이 환경 변수를 클릭하십시오. 아래와 같이 화면이 표시됩니다.
경로를 선택하고 편집 버튼을 클릭하고 끝에 파이썬의 위치 경로를 추가하십시오. 이제 파이썬 버전을 확인해 보겠습니다.
파이썬 버전 확인
E:\prequests>python --version
Python 3.7.3
설치 요청
이제 파이썬이 설치되었으므로 요청을 설치할 것입니다.
파이썬이 설치되면 파이썬 패키지 관리자, 즉 pip도 설치됩니다. 다음은 pip 버전을 확인하는 명령어입니다.
E:\prequests>pip --version
pip 19.1.1 from c:\users\xxxxx\appdata\local\programs\python\python37\lib\site-p
ackages\pip (python 3.7)
pip가 설치되어 있으며 버전은 19.1.1입니다. 이제 pip를 사용하여 Requests 모듈을 설치합니다.
명령은 다음과 같습니다.
pip install requests
E:\prequests>pip install requests
Requirement already satisfied: requests in c:\users\xxxx\appdata\local\programs
\python\python37\lib\site-packages (2.22.0)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\kamat\appdata\loca
l\programs\python\python37\lib\site-packages (from requests) (2019.3.9)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in c:\use
rs\xxxxx\appdata\local\programs\python\python37\lib\site-packages (from requests
) (1.25.3)
Requirement already satisfied: idna<2.9,>=2.5 in c:\users\xxxxxxx\appdata\local\pr
ograms\python\python37\lib\site-packages (from requests) (2.8)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in c:\users\xxxxx\appdata\l
ocal\programs\python\python37\lib\site-packages (from requests) (3.0.4)
모듈이 이미 설치되어 있으므로 명령 프롬프트에 요구 사항이 이미 충족되었다고 표시됩니다. 설치되지 않았다면 설치에 필요한 패키지를 다운로드했을 것입니다.
설치된 requests 모듈의 세부 사항을 확인하려면 다음 명령을 사용할 수 있습니다.
pip show requests
E:\prequests>pip show requests
Name: requests
Version: 2.22.0
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
Author-email: [email protected]
License: Apache 2.0
Location: c:\users\xxxxx\appdata\local\programs\python\python37\lib\site-package
S
Requires: certifi, idna, urllib3, chardet
Required-by:
요청 모듈의 버전은 2.22.0입니다.
Python의 요청은 클라이언트와 서버간에 데이터를 교환하는 데 도움이되는 HTTP 라이브러리입니다. 사용자 세부 정보를 입력해야하는 양식이있는 UI가 있다고 가정하면 일단 입력하면 데이터를 저장하기 위해 클라이언트에서 서버로 Http POST 또는 PUT 요청에 불과한 데이터를 제출해야합니다.
데이터를 원하면 서버에서 가져와야합니다. 이는 다시 Http GET 요청입니다. 데이터를 요청할 때 클라이언트와 필요한 데이터로 응답하는 서버 간의 데이터 교환은 클라이언트와 서버 간의 관계가 매우 중요합니다.
요청은 제공된 URL로 이루어지며 보안 또는 비보안 URL 일 수 있습니다.
URL에 대한 요청은 GET, POST, PUT, DELETE를 사용하여 수행 할 수 있습니다. 가장 일반적으로 사용되는 방법은 주로 서버에서 데이터를 가져올 때 사용되는 GET 메서드입니다.
예를 들어 쿼리 문자열로 URL에 데이터를 보낼 수도 있습니다.
https://jsonplaceholder.typicode.com/users?id=9&username=Delphine
그래서 여기서 우리는 URL에 id = 9와 username = Delphine을 전달합니다. 모든 값은 물음표 (?) 뒤에 키 / 값 쌍으로 전송되고 여러 매개 변수가 &로 구분 된 URL로 전달됩니다.
요청 라이브러리를 사용하여 문자열 사전을 사용하여 다음과 같이 URL을 호출합니다.
여기서 URL에 대한 데이터는 문자열 사전으로 전송됩니다. id = 9 및 username = Delphine을 전달하려면 다음과 같이 할 수 있습니다.
payload = {'id': '9', 'username': 'Delphine'}
요청 라이브러리는 다음과 같이 호출됩니다.
res = requests.get('https://jsonplaceholder.typicode.com/users', params=payload')
POST를 사용하면 다음과 같이 할 수 있습니다.
res = requests.post('https://jsonplaceholder.typicode.com/users', data = {'id':'9', 'username':'Delphine'})
PUT 사용
res = requests.put('https://jsonplaceholder.typicode.com/users', data = {'id':'9', 'username':'Delphine'})
DELETE 사용
res = requests.delete('https://jsonplaceholder.typicode.com/users')
Http 요청의 응답은 텍스트 인코딩 형식, 이진 인코딩, json 형식 또는 원시 응답 일 수 있습니다. 요청 및 응답에 대한 자세한 내용은 다음 장에서 자세히 설명합니다.
이 장에서는 요청 모듈을 사용하는 방법을 이해합니다. 다음을 살펴 보겠습니다.
- HTTP 요청 만들기.
- HTTP 요청에 매개 변수 전달.
HTTP 요청 만들기
Http 요청을하려면 먼저 아래와 같이 요청 모듈을 가져와야합니다.
import requests
이제 requests 모듈을 사용하여 URL을 호출하는 방법을 살펴 보겠습니다.
URL을 사용하자- https://jsonplaceholder.typicode.com/users 코드에서 요청 모듈을 테스트합니다.
예
import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users')
print(getdata.status_code)
URL- https://jsonplaceholder.typicode.com/usersrequests.get () 메서드를 사용하여 호출됩니다. URL의 응답 객체는 getdata 변수에 저장됩니다. 변수를 인쇄 할 때 200 응답 코드를 제공합니다. 이는 응답을 성공적으로 받았음을 의미합니다.
산출
E:\prequests>python makeRequest.py
<Response [200]>
응답에서 콘텐츠를 얻으려면 getdata.content 아래와 같이-
예
import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users')
print(getdata.content)
getdata.content는 응답에서 사용 가능한 모든 데이터를 인쇄합니다.
산출
E:\prequests>python makeRequest.py
b'[\n {\n "id": 1,\n "name": "Leanne Graham",\n "username": "Bret",\n
"email": "[email protected]",\n "address": {\n "street": "Kulas Light
",\n "suite": "Apt. 556",\n "city": "Gwenborough",\n "zipcode": "
92998-3874",\n "geo": {\n "lat": "-37.3159",\n "lng": "81.149
6"\n }\n },\n "phone": "1-770-736-8031 x56442",\n "website": "hild
egard.org",\n "company": {\n "name": "Romaguera-Crona",\n "catchPhr
ase": "Multi-layered client-server neural-net",\n "bs": "harness real-time
e-markets"\n }\n }
HTTP 요청에 매개 변수 전달
URL을 요청하는 것만으로는 충분하지 않으며 매개 변수도 URL에 전달해야합니다.
매개 변수는 대부분 키 / 값 쌍으로 전달됩니다.
https://jsonplaceholder.typicode.com/users?id=9&username=Delphine
그래서 우리는 id = 9이고 username = Delphine입니다. 이제 이러한 데이터를 요청 Http 모듈에 전달하는 방법을 살펴 보겠습니다.
예
import requests
payload = {'id': 9, 'username': 'Delphine'}
getdata = requests.get('https://jsonplaceholder.typicode.com/users', params=payload)
print(getdata.content)
세부 정보는 키 / 값 쌍의 개체 페이로드에 저장되고 get () 메서드 내부의 매개 변수에 전달됩니다.
산출
E:\prequests>python makeRequest.py
b'[\n {\n "id": 9,\n "name": "Glenna Reichert",\n "username": "Delphin
e",\n "email": "[email protected]",\n "address": {\n "street":
"Dayna Park",\n "suite": "Suite 449",\n "city": "Bartholomebury",\n
"zipcode": "76495-3109",\n "geo": {\n "lat": "24.6463",\n
"lng": "-168.8889"\n }\n },\n "phone": "(775)976-6794 x41206",\n "
website": "conrad.com",\n "company": {\n "name": "Yost and Sons",\n
"catchPhrase": "Switchable contextually-based project",\n "bs": "aggregate
real-time technologies"\n }\n }\n]'
이제 응답에서 id = 9 및 username = Delphine 세부 정보를 얻습니다.
보고 싶다면 URL에 대한 응답 개체를 사용하여 매개 변수를 전달한 후 URL이 어떻게 보이는지 확인하십시오.
예
import requests
payload = {'id': 9, 'username': 'Delphine'}
getdata = requests.get('https://jsonplaceholder.typicode.com/users', params=payload)
print(getdata.url)
산출
E:\prequests>python makeRequest.py
https://jsonplaceholder.typicode.com/users?id=9&username=Delphine
이 장에서는 requests 모듈에서받은 응답에 대해 자세히 알아 봅니다. 다음 세부 사항에 대해 논의합니다.
- 응답 받기
- JSON 응답
- RAW 응답
- 이진 응답
응답 받기
request.get () 메서드를 사용하여 URL에 대한 요청을합니다.
import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users');
getdata에는 응답 객체가 있습니다. 응답의 모든 세부 사항이 있습니다. (. text )와 (. content )를 사용하여 두 가지 방법으로 응답을받을 수 있습니다 . response.text를 사용하면 아래와 같이 데이터를 텍스트 형식으로 되돌릴 수 있습니다.
예
E:\prequests>python makeRequest.py
[
{
"id": 1,
"name": "Leanne Graham",
"username": "Bret",
"email": "[email protected]",
"address": {
"street": "Kulas Light",
"suite": "Apt. 556",
"city": "Gwenborough",
"zipcode": "92998-3874",
"geo": {
"lat": "-37.3159",
"lng": "81.1496"
}
},
"phone": "1-770-736-8031 x56442",
"website": "hildegard.org",
"company": {
"name": "Romaguera-Crona",
"catchPhrase": "Multi-layered client-server neural-net",
"bs": "harness real-time e-markets"
}
},
아래와 같이 URL에 대한 소스를 볼 때 브라우저에 나타나는 것과 동일한 응답을 볼 수 있습니다.
.html URL을 사용해보고 response.text를 사용하여 콘텐츠를 볼 수도 있습니다. 브라우저에서 .html URL에 대한 소스 콘텐츠보기와 동일합니다.
이제 동일한 URL에 대해 response.content를 시도하고 출력을 보겠습니다.
예
import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users')
print(getdata.content)
산출
E:\prequests>python makeRequest.py
b'[\n {\n "id": 1,\n "name": "Leanne Graham",\n "username": "Bret",\n
"email": "[email protected]",\n "address": {\n "street": "Kulas Light
",\n "suite": "Apt. 556",\n "city": "Gwenborough",\n "zipcode": "
92998-3874",\n "geo": {\n "lat": "-37.3159",\n "lng": "81.149
6"\n }\n },\n "phone": "1-770-736-8031 x56442",\n "website": "hild
egard.org",\n "company": {\n "name": "Romaguera-Crona",\n "catchPhr
ase": "Multi-layered client-server neural-net",\n "bs": "harness real-time
e-markets"\n }\n },\n {\n "id": 2,\n "name": "Ervin Howell",\n "us
ername": "Antonette",\n "email": "[email protected]",\n "address": {\n
"street": "Victor Plains",\n "suite": "Suite 879",\n "city": "Wisoky
burgh",\n "zipcode": "90566-7771",\n "geo": {\n "lat": "-43.950
9",\n "lng": "-34.4618"\n }\n },\n "phone": "010-692-6593 x091
25",\n "website": "anastasia.net",\n "company": {\n "name": "Deckow-C
rist",\n "catchPhrase": "Proactive didactic contingency",\n "bs": "syn
ergize scalable supply-chains"\n }\n },\n {\n "id": 3,\n "name": "Cle
mentine Bauch",\n "username": "Samantha",\n "email":
"[email protected]",
\n "address": {\n "street": "Douglas Extension",\n "suite": "Suite
847",\n "city": "McKenziehaven",\n "zipcode": "59590-4157",\n "ge
o": {\n "lat": "-68.6102",\n "lng": "-47.0653"\n }\n },\n
응답은 바이트 단위로 제공됩니다. 당신은 편지를 받게 될 것입니다b응답 시작시. 요청 모듈을 사용하면 사용 된 인코딩을 가져올 수 있으며 필요한 경우 인코딩을 변경할 수도 있습니다. 예를 들어 인코딩을 얻으려면 response.encoding을 사용할 수 있습니다.
print(getdata.encoding)
산출
utf-8
인코딩은 다음과 같이 변경할 수 있습니다.-원하는 인코딩을 사용할 수 있습니다.
getdata.encoding = 'ISO-8859-1'
JSON 응답
다음과 같이 response.json () 메서드를 사용하여 json 형식으로 Http 요청에 대한 응답을 얻을 수도 있습니다.
예
import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users')
print(getdata.json())
산출
E:\prequests>python makeRequest.py
[{'id': 1, 'name': 'Leanne Graham', 'username': 'Bret', 'email': 'Sincere@april.
biz', 'address': {'street': 'Kulas Light', 'suite': 'Apt. 556', 'city': 'Gwenbor
ough', 'zipcode': '92998-3874', 'geo': {'lat': '-37.3159', 'lng': '81.1496'}},
'
phone': '1-770-736-8031 x56442', 'website': 'hildegard.org', 'company': {'name':
'Romaguera-Crona', 'catchPhrase': 'Multi-layered client-server neural-net', 'bs
': 'harness real-time e-markets'}}]
RAW 응답
Http URL에 대한 원시 응답이 필요한 경우 response.raw를 사용할 수 있습니다. stream=True 아래와 같이 get 메소드 내부에서-
예
import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users', stream=True)
print(getdata.raw)
산출
E:\prequests>python makeRequest.py
<urllib3.response.HTTPResponse object at 0x000000A8833D7B70>
원시 데이터에서 더 많은 내용을 읽으려면 다음과 같이 할 수 있습니다.
print(getdata.raw.read(50))
산출
E:\prequests>python makeRequest.py
b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\x95\x98[o\xe38\x12\x85\xdf\xe7W\x10y\
xda\x01F\x82.\xd4m\x9f\xdc\x9dd\xba\xb7\x93\xf4\x06q\xef4\x06\x83A@K\x15\x89m'
이진 응답
바이너리 응답을 얻기 위해 response.content를 사용할 수 있습니다.
예
import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users')
print(getdata.content)
산출
E:\prequests>python makeRequest.py
b'[\n {\n "id": 1,\n "name": "Leanne Graham",\n "username": "Bret",\n
"email": "[email protected]",\n "address": {\n "street": "Kulas Light
",\n "suite": "Apt. 556",\n "city": "Gwenborough",\n "zipcode": "
92998-3874",\n "geo": {\n "lat": "-37.3159",\n "lng": "81.149
6"\n }\n },\n "phone": "1-770-736-8031 x56442",\n "website": "hild
egard.org",\n "company": {\n "name": "Romaguera-Crona",\n "catchPhr
ase": "Multi-layered client-server neural-net",\n "bs": "harness real-time
e-markets"\n }\n },\n {\n "id": 2,\n "name": "Ervin Howell",\n "us
ername": "Antonette",\n "email": "[email protected]",\n "address": {\n
"street": "Victor Plains",\n "suite": "Suite 879",\n "city": "Wisoky
burgh",\n "zipcode": "90566-7771",\n "geo": {\n "lat": "-43.950
9",\n "lng": "-34.4618"\n }\n },\n "phone": "010-692-6593 x091
25",\n "website": "anastasia.net",\n "company": {\n "name": "Deckow-C
rist",\n "catchPhrase": "Proactive didactic contingency",\n "bs": "syn
ergize scalable supply-chains"\n }\n },\n {\n "id": 3,\n "name": "Cle
mentine Bauch",\n "username": "Samantha",\n "email": "[email protected]",
\n "address": {\n "street": "Douglas Extension",\n "suite": "Suite
847",\n "city": "McKenziehaven",\n "zipcode": "59590-4157",\n "ge
o": {\n "lat": "-68.6102",\n "lng": "-47.0653"\n }\n },\n
응답은 바이트 단위로 제공됩니다. 당신은 편지를 받게 될 것입니다b응답 시작시. 바이너리 응답은 대부분 텍스트가 아닌 요청에 사용됩니다.
요청-HTTP 요청 헤더
이전 장에서 요청을하고 응답을받는 방법을 살펴 보았습니다. 이 장에서는 URL의 헤더 섹션에 대해 조금 더 살펴 보겠습니다. 그래서 우리는 다음을 살펴볼 것입니다.
- 요청 헤더 이해
- 맞춤 헤더
- 응답 헤더
요청 헤더 이해
브라우저에서 URL을 누르고 검사하고 개발자 도구 네트워크 탭에서 확인하십시오.
응답 헤더, 요청 헤더, 페이로드 등을 받게됩니다.
예를 들어 다음 URL을 고려하십시오.
https://jsonplaceholder.typicode.com/users
다음과 같이 헤더 세부 정보를 얻을 수 있습니다.
예
import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users', stream=True)
print(getdata.headers)
산출
E:\prequests>python makeRequest.py
{'Date': 'Sat, 30 Nov 2019 05:15:00 GMT', 'Content-Type': 'application/json; cha
rset=utf-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Set-Co
okie': '__cfduid=d2b84ccf43c40e18b95122b0b49f5cf091575090900; expires=Mon, 30-De
c-19 05:15:00 GMT; path=/; domain=.typicode.com; HttpOnly', 'X-Powered-By': 'Exp
ress', 'Vary': 'Origin, Accept-Encoding', 'Access-Control-Allow-Credentials': 't
rue', 'Cache-Control': 'max-age=14400', 'Pragma': 'no-cache', 'Expires': '-1', '
X-Content-Type-Options': 'nosniff', 'Etag': 'W/"160d-1eMSsxeJRfnVLRBmYJSbCiJZ1qQ
"', 'Content-Encoding': 'gzip', 'Via': '1.1 vegur', 'CF-Cache-Status': 'HIT', 'A
ge': '2271', 'Expect-CT': 'max-age=604800, report-uri="https://report-uri.cloudf
lare.com/cdn-cgi/beacon/expect-ct"', 'Server': 'cloudflare', 'CF-RAY': '53da574f
f99fc331-SIN'}
http 헤더를 읽으려면 다음과 같이 할 수 있습니다.
getdata.headers["Content-Encoding"] // gzip
맞춤 헤더
아래와 같이 호출되는 URL에 헤더를 보낼 수도 있습니다.
예
import requests
headers = {'x-user': 'test123'}
getdata = requests.get('https://jsonplaceholder.typicode.com/users', headers=headers)
전달 된 헤더는 문자열, 바이트 문자열 또는 유니 코드 형식이어야합니다. 요청의 동작은 전달 된 사용자 지정 헤더에 따라 변경되지 않습니다.
응답 헤더
브라우저 개발자 도구의 네트워크 탭에서 URL을 확인하면 응답 헤더는 아래와 같습니다.
요청 모듈에서 헤더의 세부 사항을 얻으려면 사용하십시오. Response.headers는 다음과 같습니다.
예
import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users')
print(getdata.headers)
산출
E:\prequests>python makeRequest.py
{'Date': 'Sat, 30 Nov 2019 06:08:10 GMT', 'Content-Type': 'application/json; cha
rset=utf-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Set-Co
okie': '__cfduid=de1158f1a5116f3754c2c353055694e0d1575094090; expires=Mon, 30-De
c-19 06:08:10 GMT; path=/; domain=.typicode.com; HttpOnly', 'X-Powered-By': 'Exp
ress', 'Vary': 'Origin, Accept-Encoding', 'Access-Control-Allow-Credentials': 't
rue', 'Cache-Control': 'max-age=14400', 'Pragma': 'no-cache', 'Expires': '-1', '
X-Content-Type-Options': 'nosniff', 'Etag': 'W/"160d-1eMSsxeJRfnVLRBmYJSbCiJZ1qQ
"', 'Content-Encoding': 'gzip', 'Via': '1.1 vegur', 'CF-Cache-Status': 'HIT', 'A
ge': '5461', 'Expect-CT': 'max-age=604800, report-uri="https://report-uri.cloudf
lare.com/cdn-cgi/beacon/expect-ct"', 'Server': 'cloudflare', 'CF-RAY': '53daa52f
3b7ec395-SIN'}
다음과 같이 원하는 특정 헤더를 얻을 수 있습니다.
print(getdata.headers["Expect-CT"])
산출
max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/exp
ect-ct
You can also get the header details by using the get() method.
print(getdata.headers.get("Expect-CT"))
산출
max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/exp
ect-ct
요청-GET 요청 처리
이 장에서는 가장 일반적이고 자주 사용되는 GET 요청에 대해 자세히 설명합니다. 요청 모듈에서 GET 작업은 매우 쉽습니다. 다음은 GET 메서드를 사용한 URL 작업에 대한 간단한 예입니다.
예
import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users')
print(getdata.content)
getdata.content, will print all the data available in the response.
산출
E:\prequests>python makeRequest.py
b'[\n {\n "id": 1,\n "name": "Leanne Graham",\n "username": "Bret",\n
"email": "[email protected]",\n "address": {\n "street": "Kulas Light
",\n "suite": "Apt. 556",\n "city": "Gwenborough",\n "zipcode": "
92998-3874",\n "geo": {\n "lat": "-37.3159",\n "lng": "81.149
6"\n }\n },\n "phone": "1-770-736-8031 x56442",\n "website": "hild
egard.org",\n "company": {\n "name": "Romaguera-Crona",\n "catchPhr
ase": "Multi-layered client-server neural-net",\n "bs": "harness real-time
e-markets"\n }\n }
아래와 같이 param 속성을 사용하여 get 메소드에 매개 변수를 전달할 수도 있습니다.
import requests
payload = {'id': 9, 'username': 'Delphine'}
getdata = requests.get('https://jsonplaceholder.typicode.com/users',
params=payload)
print(getdata.content)
세부 정보는 키 / 값 쌍의 개체 페이로드에 저장되고 get () 메서드 내부의 매개 변수에 전달됩니다.
산출
E:\prequests>python makeRequest.py
b'[\n {\n "id": 9,\n "name": "Glenna Reichert",\n "username": "Delphin
e",\n "email": "[email protected]",\n "address": {\n "street":
"Dayna Park",\n "suite": "Suite 449",\n "city": "Bartholomebury",\n
"zipcode": "76495-3109",\n "geo": {\n "lat": "24.6463",\n
"lng": "-168.8889"\n }\n },\n "phone": "(775)976-6794 x41206",\n "
website": "conrad.com",\n "company": {\n "name": "Yost and Sons",\n
"catchPhrase": "Switchable contextually-based project",\n "bs": "aggregate
real-time technologies"\n }\n }\n]'
POST, PUT, PATCH 및 DELETE 요청 처리
이 장에서는 요청 라이브러리를 사용하여 POST 메소드를 사용하는 방법과 URL에 매개 변수를 전달하는 방법을 이해합니다.
POST 사용
PUT 요청의 경우 Requests 라이브러리에는 requests.post () 메서드가 있으며 그 예는 다음과 같습니다.
수입 요청
myurl = 'https://postman-echo.com/post'
myparams = {'name': 'ABC', 'email':'[email protected]'}
res = requests.post(myurl, data=myparams)
print(res.text)
산출
E:\prequests>python makeRequest.py
{"args":{},"data":"","files":{},"form":{"name":"ABC","email":"[email protected]"},"headers":{"x-forwarded-proto":"https","host":"postman-echo.com","content-length":"30","accept":"*/*","accept-encoding":"gzip,deflate","content-type":"application/x-www-form-urlencoded","user-agent":"python-requests/2.22.0","x-forwarded-port":"443"},"json":{"name":"ABC","email":"[email protected]"},"url":"https://postman-echo.com/post"}
위에 표시된 예에서 양식 데이터를 키-값 쌍으로 requests.post () 내부의 데이터 매개 변수에 전달할 수 있습니다. 또한 요청 모듈에서 PUT, PATCH 및 DELETE로 작업하는 방법을 살펴볼 것입니다.
PUT 사용
PUT 요청의 경우 Requests 라이브러리에는 requests.put () 메서드가 있으며 그 예는 아래와 같습니다.
import requests
myurl = 'https://postman-echo.com/put'
myparams = {'name': 'ABC', 'email':'[email protected]'}
res = requests.put(myurl, data=myparams)
print(res.text)
산출
E:\prequests>python makeRequest.py
{"args":{},"data":"","files":{},"form":{"name":"ABC","email":"[email protected]"},"h
eaders":{"x-forwarded-proto":"https","host":"postman-echo.com","content-length":
"30","accept":"*/*","accept-encoding":"gzip, deflate","content-type":"applicatio
n/x-www-form-urlencoded","user-agent":"python-requests/2.22.0","x-forwarded-port
":"443"},"json":{"name":"ABC","email":"[email protected]"},"url":"https://postman-ec ho.com/put"}
PATCH 사용
PATCH 요청의 경우 Requests 라이브러리에는 requests.patch () 메서드가 있으며 그 예는 아래와 같습니다.
import requests
myurl = https://postman-echo.com/patch'
res = requests.patch(myurl, data="testing patch")
print(res.text)
산출
E:\prequests>python makeRequest.py
{"args":{},"data":{},"files":{},"form":{},"headers":{"x-forwarded-proto":"https"
,"host":"postman-echo.com","content-length":"13","accept":"*/*","accept-encoding
":"gzip, deflate","user-agent":"python-requests/2.22.0","x-forwarded-port":"443"
},"json":null,"url":"https://postman-echo.com/patch"}
DELETE 사용
DELETE 요청의 경우 Requests 라이브러리에는 requests.delete () 메서드가 있으며 그 예는 아래와 같습니다.
import requests
myurl = 'https://postman-echo.com/delete'
res = requests.delete(myurl, data="testing delete")
print(res.text)
산출
E:\prequests>python makeRequest.py
{"args":{},"data":{},"files":{},"form":{},"headers":{"x-forwarded-proto":"https"
,"host":"postman-echo.com","content-length":"14","accept":"*/*","accept-encoding
":"gzip, deflate","user-agent":"python-requests/2.22.0","x-forwarded-port":"443"
},"json":null,"url":"https://postman-echo.com/delete"}
요청-파일 업로드
이 장에서는 요청을 사용하여 파일을 업로드하고 업로드 된 파일의 내용을 읽습니다. 우리는files 아래 예제와 같이 param.
우리는 http://httpbin.org/파일을 업로드하려면 게시하십시오.
예
import requests
myurl = 'https://httpbin.org/post'
files = {'file': open('test.txt', 'rb')}
getdata = requests.post(myurl, files=files)
print(getdata.text)
Test.txt
File upload test using Requests
예
var total = [0, 1, 2, 3].reduceRight(function(a, b){ return a + b; });
console.log("total is : " + total );
산출
E:\prequests>python makeRequest.py
{
"args": {},
"data": "",
"files": {
"file": "File upload test using Requests"
},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "175",
"Content-Type": "multipart/form-data;
boundary=28aee3a9d15a3571fb80d4d2a94bf
d33",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.22.0"
},
"json": null,
"origin": "117.223.63.135, 117.223.63.135",
"url": "https://httpbin.org/post"
}
아래와 같이 파일의 내용을 보낼 수도 있습니다.
예
import requests
myurl = 'https://httpbin.org/post'
files = {'file': ('test1.txt', 'Welcome to TutorialsPoint')}
getdata = requests.post(myurl, files=files)
print(getdata.text)
산출
E:\prequests>python makeRequest.py
{
"args": {},
"data": "",
"files": {
"file": "Welcome to TutorialsPoint"
},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "170",
"Content-Type": "multipart/form-data; boundary=f2837238286fe40e32080aa7e172b
e4f",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.22.0"
},
"json": null,
"origin": "117.223.63.135, 117.223.63.135",
"url": "https://httpbin.org/post"
}
요청-쿠키 작업
이 장에서는 쿠키를 다루는 방법에 대해 설명합니다. 요청 라이브러리를 사용하여 URL을 호출하는 동안 쿠키를 가져오고 쿠키를 보낼 수 있습니다.
URL, https://jsonplaceholder.typicode.com/users 브라우저에서 히트하면 아래와 같이 쿠키에 대한 세부 정보를 얻을 수 있습니다.
아래와 같이 쿠키를 읽을 수 있습니다.
예
import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users')
print(getdata.cookies["__cfduid"])
산출
E:\prequests>python makeRequest.py
d1733467caa1e3431fb7f768fa79ed3741575094848
또한 요청시 쿠키를 보낼 수 있습니다.
예
import requests
cookies = dict(test='test123')
getdata = requests.get('https://httpbin.org/cookies',cookies=cookies)
print(getdata.text)
산출
E:\prequests>python makeRequest.py
{
"cookies": {
"test": "test123"
}
}
요청-오류 작업
이 장에서는 Http 요청 라이브러리로 작업 할 때 발생하는 오류를 처리하는 방법에 대해 설명합니다. 가능한 모든 경우에 대해 오류를 관리하는 것이 항상 좋은 방법입니다.
오류 예외
요청 모듈은 다음 유형의 오류 예외를 제공합니다.
ConnectionError− 연결 오류가있는 경우 발생합니다. 예를 들어, 네트워크 실패, DNS 오류이므로 요청 라이브러리가 ConnectionError 예외를 발생시킵니다.
Response.raise_for_status()− 상태 코드 즉 401, 404에 따라 요청 된 URL에 대해 HTTPError가 발생합니다.
HTTPError−이 오류는 요청에 대해 잘못된 응답이 내려 가면 발생합니다.
Timeout− 요청 된 URL에 대한 시간 초과로 인해 오류가 발생했습니다.
TooManyRedirects− 최대 리디렉션에 대한 제한을 초과하면 TooManyRedirects 오류가 발생합니다.
예
다음은 타임 아웃에 대해 표시된 오류의 예입니다.
import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users',timeout=0.001)
print(getdata.text)
산출
raise ConnectTimeout(e, request=request)
requests.exceptions.ConnectTimeout: HTTPSConnectionPool(host='jsonplaceholder.ty
picode.com', port=443): Max retries exceeded with url: /users (Caused by Connect
TimeoutError(<urllib3.connection.VerifiedHTTPSConnection object at
0x000000B02AD
E76A0>, 'Connection to jsonplaceholder.typicode.com timed out. (connect timeout= 0.001)'))
요청-시간 초과 처리
요청하는 URL에 시간 초과를 쉽게 추가 할 수 있습니다. 따라서 타사 URL을 사용하고 응답을 기다리고 있습니다. URL이 시간 범위 내에 응답 또는 오류로 응답하기를 원할 수 있으므로 항상 URL에 시간 제한을 지정하는 것이 좋습니다. 그렇게하지 않으면 해당 요청을 무기한 대기하게 될 수 있습니다.
타임 아웃 매개 변수를 사용하여 URL에 타임 아웃을 줄 수 있으며 값은 아래 예제와 같이 초 단위로 전달됩니다.
예
import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users',timeout=0.001)
print(getdata.text)
산출
raise ConnectTimeout(e, request=request)
requests.exceptions.ConnectTimeout: HTTPSConnectionPool(host='jsonplaceholder.ty
picode.com', port=443): Max retries exceeded with url: /users (Caused by Connect
TimeoutError(<urllib3.connection.VerifiedHTTPSConnection object at 0x000000B02AD
E76A0>, 'Connection to jsonplaceholder.typicode.com timed out. (connect timeout=
0.001)'))
주어진 시간 제한은 다음과 같습니다.
getdata = requests.get('https://jsonplaceholder.typicode.com/users',timeout=0.001)
실행시 출력에 표시된대로 연결 시간 초과 오류가 발생합니다. 주어진 시간 제한은 0.001이며 요청이 응답을 다시받을 수없고 오류가 발생합니다. 이제 타임 아웃을 늘리고 확인하겠습니다.
예
import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users',timeout=1.000)
print(getdata.text)
산출
E:\prequests>python makeRequest.py
[
{
"id": 1,
"name": "Leanne Graham",
"username": "Bret",
"email": "[email protected]",
"address": {
"street": "Kulas Light",
"suite": "Apt. 556",
"city": "Gwenborough",
"zipcode": "92998-3874",
"geo": {
"lat": "-37.3159",
"lng": "81.1496"
}
},
"phone": "1-770-736-8031 x56442",
"website": "hildegard.org",
"company": {
"name": "Romaguera-Crona",
"catchPhrase": "Multi-layered client-server neural-net",
"bs": "harness real-time e-markets"
}
1 초의 제한 시간으로 요청 된 URL에 대한 응답을 얻을 수 있습니다.
요청-리디렉션 처리
이 장에서는 요청 라이브러리가 URL 리디렉션 사례를 처리하는 방법을 살펴 봅니다.
예
import requests
getdata = requests.get('http://google.com/')
print(getdata.status_code)
print(getdata.history)
URL- http://google.com 상태 코드 301 (영구 이동)을 사용하여 리디렉션됩니다. https://www.google.com/. 리디렉션은 기록에 저장됩니다.
산출
위의 코드가 실행되면 다음과 같은 결과가 나옵니다.
E:\prequests>python makeRequest.py
200
[<Response [301]>]
다음을 사용하여 URL 리디렉션을 중지 할 수 있습니다. allow_redirects=False. 사용되는 GET, POST, OPTIONS, PUT, DELETE, PATCH 메소드에서 수행 할 수 있습니다.
예
여기에 같은 예가 있습니다.import requests
getdata = requests.get('http://google.com/', allow_redirects=False)
print(getdata.status_code)
print(getdata.history)
print(getdata.text)
이제 출력을 확인하면 리디렉션이 허용되지 않으며 상태 코드 301이 표시됩니다.
산출
E:\prequests>python makeRequest.py
301
[]
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
요청-처리 내역
다음을 사용하여 주어진 URL의 기록을 얻을 수 있습니다. response.history. 지정된 URL에 리디렉션이 있으면 동일한 내용이 기록에 저장됩니다.
역사를 위해
import requests
getdata = requests.get('http://google.com/')
print(getdata.status_code)
print(getdata.history)
산출
E:\prequests>python makeRequest.py
200
[<Response [301]>]
그만큼 response.history속성에는 요청에 따라 수행 된 응답 개체의 세부 정보가 있습니다. 존재하는 값은 가장 오래된 값에서 최신 값으로 정렬됩니다. 그만큼response.history 속성은 요청 된 URL에서 수행 된 모든 리디렉션을 추적합니다.
요청-세션 처리
요청 사이에 데이터를 유지하려면 세션이 필요합니다. 따라서 동일한 호스트가 반복해서 호출되면 TCP 연결을 다시 사용할 수 있으므로 성능이 향상됩니다. 이제 세션을 사용하여 이루어진 요청에서 쿠키를 유지하는 방법을 살펴 보겠습니다.
세션을 사용하여 쿠키 추가
import requests
req = requests.Session()
cookies = dict(test='test123')
getdata = req.get('https://httpbin.org/cookies',cookies=cookies)
print(getdata.text)
산출
E:\prequests>python makeRequest.py
{
"cookies": {
"test": "test123"
}
}
세션을 사용하면 요청 전반에 걸쳐 쿠키 데이터를 보존 할 수 있습니다. 아래와 같이 세션을 사용하여 헤더 데이터를 전달할 수도 있습니다.
예
import requests
req = requests.Session()
req.headers.update({'x-user1': 'ABC'})
headers = {'x-user2': 'XYZ'}
getdata = req.get('https://httpbin.org/headers', headers=headers)
print(getdata.headers)
요청-SSL 인증
SSL 인증서는 보안 URL과 함께 제공되는 보안 기능입니다. 요청 라이브러리를 사용하면 제공된 https URL에 대한 SSL 인증서도 확인합니다. SSL 확인은 요청 모듈에서 기본적으로 활성화되며 인증서가 없으면 오류가 발생합니다.
보안 URL 작업
다음은 보안 URL로 작업하는 예입니다.
import requests
getdata = requests.get(https://jsonplaceholder.typicode.com/users)
print(getdata.text)
산출
E:\prequests>python makeRequest.py
[
{
"id": 1,
"name": "Leanne Graham",
"username": "Bret",
"email": "[email protected]",
"address": {
"street": "Kulas Light",
"suite": "Apt. 556",
"city": "Gwenborough",
"zipcode": "92998-3874",
"geo": {
"lat": "-37.3159",
"lng": "81.1496"
}
},
"phone": "1-770-736-8031 x56442",
"website": "hildegard.org",
"company": {
"name": "Romaguera-Crona",
"catchPhrase": "Multi-layered client-server neural-net",
"bs": "harness real-time e-markets"
}
}
]
위의 https URL에서 쉽게 응답을 받고 있으며 요청 모듈이 SSL 인증서를 확인할 수 있기 때문입니다.
아래 예와 같이 verify = False를 추가하여 SSL 확인을 비활성화 할 수 있습니다.
예
import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users', verify=False)
print(getdata.text)
출력이 표시되지만 SSL 인증서가 확인되지 않았으며 인증서 확인을 추가하는 것이 좋습니다.라는 경고 메시지도 표시됩니다.
산출
E:\prequests>python makeRequest.py
connectionpool.py:851: InsecureRequestWarning: Unverified HTTPS request is being
made. Adding certificate verification is strongly advised. See: https://urllib3
.readthedocs.io/en/latest/advanced-usage.htm l#ssl-warnings
InsecureRequestWarning)
[
{
"id": 1,
"name": "Leanne Graham",
"username": "Bret",
"email": "[email protected]",
"address": {
"street": "Kulas Light",
"suite": "Apt. 556",
"city": "Gwenborough",
"zipcode": "92998-3874",
"geo": {
"lat": "-37.3159",
"lng": "81.1496"
}
},
"phone": "1-770-736-8031 x56442",
"website": "hildegard.org",
"company": {
"name": "Romaguera-Crona",
"catchPhrase": "Multi-layered client-server neural-net",
"bs": "harness real-time e-markets"
}
}
]
SSL 인증서를 끝에서 호스팅하고 다음을 사용하여 경로를 제공하여 SSL 인증서를 확인할 수도 있습니다. verify 아래와 같이 param.
예
import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users', verify='C:\Users\AppData\Local\certificate.txt')
print(getdata.text)
산출
E:\prequests>python makeRequest.py
[
{
"id": 1,
"name": "Leanne Graham",
"username": "Bret",
"email": "[email protected]",
"address": {
"street": "Kulas Light",
"suite": "Apt. 556",
"city": "Gwenborough",
"zipcode": "92998-3874",
"geo": {
"lat": "-37.3159",
"lng": "81.1496"
}
},
"phone": "1-770-736-8031 x56442",
"website": "hildegard.org",
"company": {
"name": "Romaguera-Crona",
"catchPhrase": "Multi-layered client-server neural-net",
"bs": "harness real-time e-markets"
}
}
]
요청-인증
이 장에서는 요청 모듈에서 사용할 수있는 인증 유형에 대해 설명합니다.
우리는 다음을 논의 할 것입니다.
HTTP 요청에서 인증 작업
기본 인증
다이제스트 인증
OAuth2 인증
HTTP 요청에서 인증 작업
HTTP 인증은 클라이언트가 URL을 요청할 때 사용자 이름, 비밀번호와 같은 일부 인증 정보를 요청하는 서버 측에 있습니다. 이는 클라이언트와 서버간에 교환되는 요청 및 응답에 대한 추가 보안입니다.
클라이언트 측에서 이러한 추가 인증 정보, 즉 사용자 이름과 암호를 헤더로 보낼 수 있으며 나중에 서버 측에서 유효성을 검사합니다. 인증이 유효한 경우에만 서버 측에서 응답이 전달됩니다.
요청 라이브러리에는 requests.auth에서 가장 일반적으로 사용되는 인증이 있으며, 기본 인증 ( HTTPBasicAuth ) 및 다이제스트 인증 ( HTTPDigestAuth )입니다.
기본 인증
이것은 서버에 인증을 제공하는 가장 간단한 형태입니다. 기본 인증을 사용하기 위해 요청 라이브러리에서 사용할 수있는 HTTPBasicAuth 클래스를 사용할 것입니다.
예
다음은 사용 방법에 대한 실제 예제입니다.
import requests
from requests.auth import HTTPBasicAuth
response_data = requests.get('httpbin.org/basic-auth/admin/admin123', auth=HTTPDigestAuth('admin', 'admin123'))
print(response_data.text)
URL을 호출하고 있습니다. https://httpbin.org/basic-auth/admin/admin123사용자는 admin 이고 암호는 admin123입니다 .
따라서이 URL은 인증, 즉 사용자 및 암호 없이는 작동하지 않습니다. auth 매개 변수를 사용하여 인증을 제공하면 서버 만 응답을 반환합니다.
산출
E:\prequests>python makeRequest.py
{
"authenticated": true,
"user": "admin"
}
다이제스트 인증
이것은 요청에 사용할 수있는 또 다른 인증 형식입니다. 요청에서 HTTPDigestAuth 클래스를 사용할 것입니다.
예
import requests
from requests.auth import HTTPDigestAuth
response_data = requests.get('https://httpbin.org/digest-auth/auth/admin/admin123>, auth=HTTPDigestAuth('admin', 'admin123'))
print(response_data.text)
산출
E:\prequests>python makeRequest.py
{
"authenticated": true,
"user": "admin"
}
OAuth2 인증
OAuth2 인증을 사용하려면“requests_oauth2”라이브러리가 필요합니다. “requests_oauth2”를 설치하려면 다음을 수행하십시오.
pip install requests_oauth2
설치하는 동안 터미널에 표시되는 화면은 다음과 같습니다.
E:\prequests>pip install requests_oauth2
Collecting requests_oauth2
Downloading https://files.pythonhosted.org/packages/52/dc/01c3c75e6e7341a2c7a9
71d111d7105df230ddb74b5d4e10a3dabb61750c/requests-oauth2-0.3.0.tar.gz
Requirement already satisfied: requests in c:\users\xyz\appdata\local\programs
\python\python37\lib\site-packages (from requests_oauth2) (2.22.0)
Requirement already satisfied: six in c:\users\xyz\appdata\local\programs\pyth
on\python37\lib\site-packages (from requests_oauth2) (1.12.0)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in c:\use
rs\xyz\appdata\local\programs\python\python37\lib\site-packages (from requests
->requests_oauth2) (1.25.3)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\xyz\appdata\loca
l\programs\python\python37\lib\site-packages (from requests->requests_oauth2) (2
019.3.9)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in c:\users\xyz\appdata\l
ocal\programs\python\python37\lib\site-packages (from requests->requests_oauth2)
(3.0.4)
Requirement already satisfied: idna<2.9,>=2.5 in c:\users\xyz\appdata\local\pr
ograms\python\python37\lib\site-packages (from requests->requests_oauth2) (2.8)
Building wheels for collected packages: requests-oauth2
Building wheel for requests-oauth2 (setup.py) ... done
Stored in directory: C:\Users\xyz\AppData\Local\pip\Cache\wheels\90\ef\b4\43
3743cbbc488463491da7df510d41c4e5aa28213caeedd586
Successfully built requests-oauth2
"requests-oauth2"설치가 완료되었습니다. Google, Twitter의 API를 사용하려면 동의가 필요하며 OAuth2 인증을 사용하여 동일하게 수행됩니다.
OAuth2 인증을 위해서는 클라이언트 ID와 비밀 키가 필요합니다. 그것을 얻는 방법에 대한 자세한 내용은https://developers.google.com/identity/protocols/OAuth2.
나중에 사용할 수있는 Google API 콘솔에 로그인합니다. https://console.developers.google.com/클라이언트 ID와 비밀 키를 가져옵니다.
예
다음은 "requests-oauth2"를 사용하는 방법의 예입니다.
import requests
from requests_oauth2.services import GoogleClient
google_auth = GoogleClient(
client_id="xxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
redirect_uri="http://localhost/auth/success.html",
)
a = google_auth.authorize_url(
scope=["profile", "email"],
response_type="code",
)
res = requests.get(a)
print(res.url)
Gmail 계정에 로그인해야하므로 제공된 URL로 리디렉션 할 수 없지만 여기에서는 google_auth가 작동하고 승인 된 URL이 제공된 예를 볼 수 있습니다.
산출
E:\prequests>python oauthRequest.py
https://accounts.google.com/o/oauth2/auth?redirect_uri=
http%3A%2F%2Flocalhost%2Fauth%2Fsuccess.html&
client_id=xxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com&
scope=profile+email&response_type=code
요청-이벤트 후크
이벤트 후크를 사용하여 요청 된 URL에 이벤트를 추가 할 수 있습니다. 아래 예에서는 응답을 사용할 수있을 때 호출 될 콜백 함수를 추가합니다.
예
콜백을 추가하려면 아래 예제와 같이 hooks param을 사용해야합니다.
mport requests
def printData(r, *args, **kwargs):
print(r.url)
print(r.text)
getdata = requests.get('https://jsonplaceholder.typicode.com/users',
hooks={'response': printData})
산출
E:\prequests>python makeRequest.py
https://jsonplaceholder.typicode.com/users
[
{
"id": 1,
"name": "Leanne Graham",
"username": "Bret",
"email": "[email protected]",
"address": {
"street": "Kulas Light",
"suite": "Apt. 556",
"city": "Gwenborough",
"zipcode": "92998-3874",
"geo": {
"lat": "-37.3159",
"lng": "81.1496"
}
},
"phone": "1-770-736-8031 x56442",
"website": "hildegard.org",
"company": {
"name": "Romaguera-Crona",
"catchPhrase": "Multi-layered client-server neural-net",
"bs": "harness real-time e-markets"
}
}
]
아래와 같이 여러 콜백 함수를 호출 할 수도 있습니다.
예
import requests
def printRequestedUrl(r, *args, **kwargs):
print(r.url)
def printData(r, *args, **kwargs):
print(r.text)
getdata = requests.get('https://jsonplaceholder.typicode.com/users', hooks={'response': [printRequestedUrl, printData]})
산출
E:\prequests>python makeRequest.py
https://jsonplaceholder.typicode.com/users
[
{
"id": 1,
"name": "Leanne Graham",
"username": "Bret",
"email": "[email protected]",
"address": {
"street": "Kulas Light",
"suite": "Apt. 556",
"city": "Gwenborough",
"zipcode": "92998-3874",
"geo": {
"lat": "-37.3159",
"lng": "81.1496"
}
},
"phone": "1-770-736-8031 x56442",
"website": "hildegard.org",
"company": {
"name": "Romaguera-Crona",
"catchPhrase": "Multi-layered client-server neural-net",
"bs": "harness real-time e-markets"
}
}
]
아래와 같이 생성 된 세션에 후크를 추가 할 수도 있습니다.
예
import requests
def printData(r, *args, **kwargs):
print(r.text)
s = requests.Session()
s.hooks['response'].append(printData)
s.get('https://jsonplaceholder.typicode.com/users')
산출
E:\prequests>python makeRequest.py
[
{
"id": 1,
"name": "Leanne Graham",
"username": "Bret",
"email": "[email protected]",
"address": {
"street": "Kulas Light",
"suite": "Apt. 556",
"city": "Gwenborough",
"zipcode": "92998-3874",
"geo": {
"lat": "-37.3159",
"lng": "81.1496"
}
},
"phone": "1-770-736-8031 x56442",
"website": "hildegard.org",
"company": {
"name": "Romaguera-Crona",
"catchPhrase": "Multi-layered client-server neural-net",
"bs": "harness real-time e-markets"
}
}
]
요청-프록시
지금까지 클라이언트가 서버에 직접 연결하고 대화하는 것을 보았습니다. 프록시를 사용하면 상호 작용은 다음과 같이 발생합니다.
클라이언트는 프록시에 요청을 보냅니다.
프록시는 요청을 서버로 보냅니다.
서버는 응답을 프록시에 다시 보냅니다.
프록시는 클라이언트에 응답을 다시 보냅니다.
Http-proxy를 사용하는 것은 클라이언트와 서버 간의 데이터 교환을 관리하기 위해 할당 된 추가 보안입니다. 요청 라이브러리는 또한 아래와 같이 프록시 매개 변수를 사용하여 프록시를 처리 할 수 있습니다.
예
import requests
proxies = {
'http': 'http://localhost:8080'
}
res = requests.get('http://httpbin.org/', proxies=proxies)
print(res.status_code)
요청은 ( 'http://localhost:8080 URL.
산출
200
요청-요청을 사용한 웹 스크랩
파이썬 요청 라이브러리를 사용하여 주어진 URL에서 데이터를 얻는 방법을 이미 살펴 보았습니다. 우리는 사이트에서 데이터를 스크랩하려고 노력할 것입니다.Tutorialspoint 사용할 수있는 https://www.tutorialspoint.com/tutorialslibrary.htm 다음을 사용하여
요청 라이브러리
파이썬의 아름다운 수프 라이브러리
우리는 이미 Requests 라이브러리를 설치했습니다. 이제 Beautiful soup 패키지를 설치하겠습니다. 다음은 공식 웹 사이트입니다.beautiful soup 사용 가능 https://www.crummy.com/software/BeautifulSoup/bs4/doc/ 아름다운 수프의 더 많은 기능을 탐구하고 싶다면.
뷰티플 수프 설치
아래에서 뷰티플 스프 설치 방법을 살펴 보겠습니다.
E:\prequests>pip install beautifulsoup4
Collecting beautifulsoup4
Downloading https://files.pythonhosted.org/packages/3b/c8/a55eb6ea11cd7e5ac4ba
cdf92bac4693b90d3ba79268be16527555e186f0/beautifulsoup4-4.8.1-py3-none-any.whl (
101kB)
|████████████████████████████████| 102kB 22kB/s
Collecting soupsieve>=1.2 (from beautifulsoup4)
Downloading https://files.pythonhosted.org/packages/81/94/03c0f04471fc245d08d0
a99f7946ac228ca98da4fa75796c507f61e688c2/soupsieve-1.9.5-py2.py3-none-any.whl
Installing collected packages: soupsieve, beautifulsoup4
Successfully installed beautifulsoup4-4.8.1 soupsieve-1.9.5
이제 파이썬 요청 라이브러리와 아름다운 수프가 설치되었습니다.
이제 주어진 URL에서 데이터를 스크랩하는 코드를 작성하겠습니다.
웹 스크래핑
import requests
from bs4 import BeautifulSoup
res = requests.get('https://www.tutorialspoint.com/tutorialslibrary.htm')
print("The status code is ", res.status_code)
print("\n")
soup_data = BeautifulSoup(res.text, 'html.parser')
print(soup_data.title)
print("\n")
print(soup_data.find_all('h4'))
요청 라이브러리를 사용하여 주어진 URL에서 콘텐츠를 가져올 수 있으며 아름다운 수프 라이브러리는이를 구문 분석하고 원하는 방식으로 세부 정보를 가져 오는 데 도움이됩니다.
아름다운 수프 라이브러리를 사용하여 Html 태그, 클래스, ID, CSS 선택기 및 더 많은 방법을 사용하여 데이터를 가져올 수 있습니다. 다음은 페이지의 제목과 페이지의 모든 h4 태그를 인쇄 한 결과입니다.
산출
E:\prequests>python makeRequest.py
The status code is 200
<title>Free Online Tutorials and Courses</title>
[<h4>Academic</h4>, <h4>Computer Science</h4>, <h4>Digital Marketing</h4>, <h4>M
onuments</h4>,<h4>Machine Learning</h4>, <h4>Mathematics</h4>, <h4>Mobile Devel
opment</h4>,<h4>SAP</h4>, <h4>Software Quality</h4>, <h4>Big Data & Analyti
cs</h4>, <h4>Databases</h4>, <h4>Engineering Tutorials</h4>, <h4>Mainframe Devel
opment</h4>, <h4>Microsoft Technologies</h4>, <h4>Java Technologies</h4>,<h4>XM
L Technologies</h4>, <h4>Python Technologies</h4>, <h4>Sports</h4>, <h4>Computer
Programming</h4>,<h4>DevOps</h4>, <h4>Latest Technologies</h4>, <h4>Telecom</h4>, <h4>Exams Syllabus</h4>, <h4>UPSC IAS Exams</h4>, <h4>Web Development</h4>,
<h4>Scripts</h4>, <h4>Management</h4>,<h4>Soft Skills</h4>, <h4>Selected Readin
g</h4>, <h4>Misc</h4>]