HTTP 요청에 대한 응답 처리

이 장에서는 요청 모듈에서받은 응답에 대해 자세히 알아 봅니다. 우리는 다음 세부 사항을 논의 할 것입니다-

  • 응답 받기
  • 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
"username": "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-Crist",
\n "catchPhrase": "Proactive didactic contingency",\n "bs":
"synergize scalable supply-chains"\n }\n },\n {\n "id": 3,\n "name": 
"Clementine 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': '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'}}]

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": 
"hildegard.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-Crist",
\n "catchPhrase": "Proactive didactic contingency",\n "bs": "syn
ergize scalable supply-chains"\n }\n },\n {\n "id": 3,\n "name":
"Clementine 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 "
geo": {\n "lat": "-68.6102",\n "lng": "-47.0653"\n }\n },\n

응답은 바이트 단위로 제공됩니다. 당신은 편지를 받게 될 것입니다b응답 시작시. 바이너리 응답은 대부분 텍스트가 아닌 요청에 사용됩니다.