HTTP İstekleri için Yanıtı İşleme

Bu bölümde, talepler modülünden alınan yanıtla ilgili daha fazla ayrıntıya gireceğiz. Aşağıdaki ayrıntıları tartışacağız -

  • Yanıt Almak
  • JSON Yanıtı
  • RAW Yanıtı
  • İkili Yanıt

Yanıt Almak

Request.get () yöntemini kullanarak URL'ye bir istekte bulunacağız.

import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users');

Getdata yanıt nesnesine sahiptir. Yanıtın tüm ayrıntılarına sahiptir. ( Text ) ve (. Content ) kullanarak 2 şekilde yanıt alabiliriz . Response.text kullanılması, verileri aşağıda gösterildiği gibi metin biçiminde geri verecektir -

Misal

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"
      }
   },
]

Aşağıda gösterildiği gibi, URL için kaynağı görüntülediğinizde tarayıcıda nasıl görüneceği gibi yanıtın aynı olduğunu göreceksiniz -

Ayrıca .html URL'yi deneyebilir ve response.text'i kullanarak içeriği görebilirsiniz, bu, tarayıcıdaki .html URL'sinin kaynak içeriği ile aynı olacaktır.

Şimdi aynı URL için response.content'i deneyelim ve çıktıyı görelim.

Misal

import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users')
print(getdata.content)

Çıktı

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

Yanıt bayt cinsinden verilir. Bir mektup alacaksınbcevabın başlangıcında. Talepler modülü ile kullanılan kodlamayı alabilir ve ayrıca gerekirse kodlamayı değiştirebilirsiniz. Örneğin, kodlamayı almak için response.encoding kullanabilirsiniz.

print(getdata.encoding)

Çıktı

utf-8

Kodlamayı aşağıdaki şekilde değiştirebilirsiniz - İstediğiniz kodlamayı kullanabilirsiniz.

getdata.encoding = 'ISO-8859-1'

JSON Yanıtı

Aşağıdaki gibi response.json () yöntemini kullanarak Http isteğinin yanıtını json biçiminde de alabilirsiniz -

Misal

import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users')
print(getdata.json())

Çıktı

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 Yanıtı

Http URL'si için ham yanıta ihtiyacınız olması durumunda, response.raw'dan yararlanabilirsiniz, ayrıca stream = True aşağıda gösterildiği gibi get yönteminin içinde -

Misal

import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users', stream=True)
print(getdata.raw)

Çıktı

E:\prequests>python makeRequest.py
<urllib3.response.HTTPResponse object at 0x000000A8833D7B70>

Ham verilerden daha fazla içerik okumak için bunu aşağıdaki gibi yapabilirsiniz -

print(getdata.raw.read(50))

Çıktı

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'

İkili Yanıt

İkili bir yanıt almak için response.content'i kullanabiliriz.

Misal

import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users')
print(getdata.content)

Çıktı

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

Yanıt bayt cinsinden verilir. Bir mektup alacaksınbcevabın başlangıcında. İkili yanıt, çoğunlukla metin olmayan istekler için kullanılır.