İstekler - Hızlı Kılavuz

Requests, web uygulamanızda http isteği / yanıtı ile başa çıkmak için kolay işlevsellik sağlayan bir HTTP kitaplığıdır. Kitaplık python ile geliştirilmiştir.

Python İsteklerinin resmi web sitesi şu adrestedir: https://2.python-requests.org/en/master/ İstekleri şu şekilde tanımlar -

Requests, insanlar için oluşturulmuş, Python için zarif ve basit bir HTTP kitaplığıdır.

İsteklerin Özellikleri

İsteklerin özellikleri aşağıda tartışılmaktadır -

İstek

Python istekleri kitaplığı, Http isteğini işlemek için kullanılabilen, kullanımı kolay yöntemlere sahiptir. Parametrelerin aktarılması ve GET, POST, PUT, DELETE gibi istek türlerinin işlenmesi çok kolaydır.

Tepki

Yanıtı ihtiyacınız olan biçimde alabilirsiniz ve desteklenenler metin biçimi, ikili yanıt, json yanıtı ve ham yanıttır.

Başlıklar

Kitaplık, gereksinimlerinize göre yeni başlıklar okumanıza, güncellemenize veya göndermenize izin verir.

Zaman aşımları

Python istekleri kitaplığını kullanarak istediğiniz URL'ye zaman aşımları kolayca eklenebilir. Öyle ki, üçüncü taraf bir URL kullanıyor ve bir yanıt bekliyorsunuz.

URL'nin bu zaman aşımı içinde bir yanıtla veya zaman aşımı nedeniyle gelen bir hatayla yanıt vermesini isteyebileceğimiz için, URL'ye zaman aşımı vermek her zaman iyi bir uygulamadır. Bunu yapmamak, ikisinin de bu isteği süresiz olarak beklemesine neden olabilir.

Hata yönetimi

İstek modülü, hata işleme için destek sağlar ve bunlardan bazıları Bağlantı Hatası, Zaman Aşımı hataları, TooManyRedirects, Response.raise_for_status hataları vb.

Kurabiye

Kitaplık, istenen URL için okumanıza, yazmanıza ve güncellemenize izin verir.

Oturumlar

Verileri korumak için, istekler arasında oturumlara ihtiyacınız vardır. Böylece, aynı ana bilgisayar tekrar tekrar aranırsa, TCP bağlantısını yeniden kullanabilirsiniz ve bu da performansı artıracaktır.

SSL sertifikaları

SSL sertifikası, güvenli url'lerle birlikte gelen bir güvenlik özelliğidir. İstekleri kullandığınızda, verilen https URL'si için SSL sertifikalarını da doğrular. SSL Doğrulaması, istek kitaplığında varsayılan olarak etkindir ve sertifika yoksa bir hata verir.

Doğrulama

HTTP kimlik doğrulaması, istemci bir URL istediğinde kullanıcı adı, parola gibi bazı kimlik doğrulama bilgilerini isteyen sunucu tarafındadır. Bu, istek ve istemci ile sunucu arasında değiş tokuş edilen yanıt için ek bir güvenliktir.

Python İstek Kitaplığı kullanmanın avantajları

Python İstek Kitaplığı kullanmanın avantajları aşağıdadır -

  • Verileri verilen URL'den kullanmak ve almak kolaydır.

  • Web sitesindeki verileri kazımak için istek kitaplığı kullanılabilir.

  • İstekleri kullanarak verilen URL için verileri alabilir, gönderebilir, silebilir, güncelleyebilirsiniz.

  • Çerezlerin ve oturumun kullanımı çok kolaydır.

  • Güvenlik, kimlik doğrulama modülü desteğiyle de ilgilenir.

Bu bölümde, İsteklerin yüklenmesi üzerinde çalışacağız. Requests modülüyle çalışmaya başlamak için önce Python'u kurmamız gerekiyor. Bu yüzden aşağıdakiler üzerinde çalışacağız−

  • Python'u yükleyin
  • Yükleme İstekleri

Python'u Yükleme

Python resmi sitesine gidin: https://www.python.org/downloads/aşağıda gösterildiği gibi ve Windows, Linux / Unix ve Mac OS için mevcut olan en son sürüme tıklayın. Python'u yanınızda bulunan 64 veya 32 bit işletim sisteminize göre indirin.

İndirdikten sonra, .exe dosyasına tıklayın ve python'u sisteminize kurmak için adımları izleyin.

Python paket yöneticisi, yani pip de yukarıdaki kurulumla birlikte varsayılan olarak kurulacaktır. Sisteminizde global olarak çalışmasını sağlamak için python'un konumunu PATH değişkenine doğrudan ekleyin. Aynısı, YOLA EKLE yazan onay kutusunu işaretlemeyi hatırlamak için kurulumun başlangıcında gösterilir. Kontrol etmeyi unutursanız, PATH'e eklemek için lütfen aşağıda verilen adımları izleyin.

PATH'e eklemek için adımları izleyin−

Bilgisayar simgesine sağ tıklayın ve özellikler> Gelişmiş Sistem Ayarları'na tıklayın.

Ekranı aşağıda gösterildiği gibi gösterecektir -

Yukarıda gösterildiği gibi Ortam Değişkenlerine tıklayın. Ekranı aşağıda gösterildiği gibi gösterecektir -

Yol'u seçin ve Düzenle düğmesine tıklayın, python'unuzun konum yolunu sonuna ekleyin. Şimdi python versiyonunu kontrol edelim.

Python sürümünü kontrol etme

E:\prequests>python --version
Python 3.7.3

Yükleme İstekleri

Artık python yüklediğimize göre, İstekleri yükleyeceğiz.

Python kurulduktan sonra, python paket yöneticisi yani pip de kurulacaktır. Pip versiyonunu kontrol etmek için komut aşağıdadır.

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 yükledik ve sürüm 19.1.1. Şimdi, Requests modülünü yüklemek için pip kullanacak.

Komut aşağıda verilmiştir−

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)

Modülü zaten kurduk, bu nedenle komut isteminde Gereksinim zaten karşılandı yazıyor; kurulmamışsa, kurulum için gerekli paketleri indirmiş olacaktı.

Yüklenen istek modülünün ayrıntılarını kontrol etmek için aşağıdaki komutu kullanabilirsiniz−

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:

Requests modülünün sürümü 2.22.0'dır.

Python'un İstekleri, istemci ve sunucu arasında veri alışverişi yapmamıza yardımcı olacak bir HTTP kitaplığıdır. Kullanıcı ayrıntılarını girmeniz gereken bir form içeren bir kullanıcı arayüzünüz olduğunu düşünün, bu nedenle bir kez girdiğinizde, verileri kaydetmek için istemciden sunucuya bir Http POST veya PUT isteğinden başka bir şey olmayan verileri göndermeniz gerekir.

Verileri istediğinizde, yine bir Http GET isteği olan sunucudan almanız gerekir. İstemci veriyi talep ettiğinde istemci ile gerekli verilerle yanıt veren sunucu arasındaki veri alışverişi, istemci ile sunucu arasındaki bu ilişki çok önemlidir.

İstek, verilen URL'ye yapılmıştır ve güvenli veya güvenli olmayan bir URL olabilir.

URL'ye istek GET, POST, PUT, DELETE kullanılarak yapılabilir. En yaygın olarak kullanılan, esas olarak sunucudan veri almak istediğinizde kullanılan GET yöntemidir.

Örneğin bir sorgu dizesi olarak URL'ye veri gönderebilirsiniz−

https://jsonplaceholder.typicode.com/users?id=9&username=Delphine

Yani burada, id = 9 ve username = Delphine'i URL'ye geçiriyoruz. Soru işaretinden (?) Sonra tüm değerler anahtar / değer çiftinde gönderilir ve birden fazla parametre & ile ayrılmış URL'ye iletilir.

İstek kitaplığını kullanarak, URL, bir dizgi sözlüğü kullanılarak aşağıdaki şekilde çağrılır.

URL'ye verilen veriler bir dizeler sözlüğü olarak gönderilir. İd = 9 ve username = Delphine geçmek istiyorsanız, aşağıdaki işlemleri yapabilirsiniz−

payload = {'id': '9', 'username': 'Delphine'}

İstek kitaplığı şu şekilde adlandırılır−

res = requests.get('https://jsonplaceholder.typicode.com/users', params=payload')

POST kullanarak aşağıdaki işlemleri yapabiliriz−

res = requests.post('https://jsonplaceholder.typicode.com/users', data = {'id':'9', 'username':'Delphine'})

PUT kullanma

res = requests.put('https://jsonplaceholder.typicode.com/users', data = {'id':'9', 'username':'Delphine'})

DELETE kullanma

res = requests.delete('https://jsonplaceholder.typicode.com/users')

Http isteğinden gelen yanıt metin kodlu biçimde, ikili kodlamalı, json biçiminde veya ham yanıt biçiminde olabilir. Talebin ve yanıtın detayları sonraki bölümlerde ayrıntılı olarak açıklanmıştır.

Bu bölümde, istekler modülüyle nasıl çalışılacağını anlayacağız. Aşağıdakilere bakacağız−

  • HTTP İstekleri Yapmak.
  • Parametreleri HTTP İsteklerine Aktarma.

HTTP Talepleri Yapmak

Http talebinde bulunmak için, öncelikle istek modülünü aşağıda gösterildiği gibi içe aktarmamız gerekir−

import requests

Şimdi istekler modülünü kullanarak URL'ye nasıl çağrı yapılacağını görelim.

URL'yi kullanalım− https://jsonplaceholder.typicode.com/users Kodda, İstek Modülünü test etmek için.

Misal

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

Url− https://jsonplaceholder.typicode.com/usersrequest.get () yöntemi kullanılarak çağrılır. URL'nin yanıt nesnesi getdata değişkeninde saklanır. Değişkeni yazdırdığımızda, 200 yanıt kodunu verir, bu da yanıtı başarıyla aldığımız anlamına gelir.

Çıktı

E:\prequests>python makeRequest.py
<Response [200]>

Yanıttaki içeriği almak için bunu kullanarak yapabiliriz getdata.content aşağıda gösterildiği gibi−

Misal

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

getdata.content, yanıtta bulunan tüm verileri yazdıracaktır.

Çı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 }

Parametreleri HTTP İsteklerine Aktarma

Sadece URL'yi istemek yeterli değil, parametreleri de URL'ye aktarmamız gerekiyor.

Parametreler çoğunlukla anahtar / değer çifti olarak aktarılır, örneğin−

 https://jsonplaceholder.typicode.com/users?id=9&username=Delphine

Yani, id = 9 ve username = Delphine var. Şimdi bu tür verilerin Http modülüne nasıl iletileceğini göreceğiz.

Misal

import requests
payload = {'id': 9, 'username': 'Delphine'}
getdata = requests.get('https://jsonplaceholder.typicode.com/users', params=payload)
print(getdata.content)

Ayrıntılar, anahtar / değer çiftindeki nesne yükünde depolanır ve get () yöntemi içinde params'a iletilir.

Çıktı

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]'

Şimdi yanıtta id = 9 ve username = Delphine ayrıntılarının ayrıntılarını alıyoruz.

Parametreleri geçtikten sonra URL'nin nasıl göründüğünü görmek istiyorsanız, yanıt nesnesini URL'ye kullanın.

Misal

import requests
payload = {'id': 9, 'username': 'Delphine'}
getdata = requests.get('https://jsonplaceholder.typicode.com/users', params=payload)
print(getdata.url)

Çıktı

E:\prequests>python makeRequest.py
https://jsonplaceholder.typicode.com/users?id=9&username=Delphine

Bu bölümde, talepler modülünden alınan yanıtla ilgili daha fazla ayrıntıya gireceğiz. Aşağıdaki detayları 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'i kullanmak size 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ğiyle aynı yanıtın 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 "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

Yanıt bayt cinsinden verilir. Bir mektup alacaksınbcevabın başlangıcında. İstekler 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ı

Ayrıca aşağıdaki gibi response.json () yöntemini kullanarak Http isteğinin yanıtını json formatında 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': '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 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 veriden 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": "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

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.

İstekler - HTTP İstek Başlıkları

Bir önceki bölümde, nasıl talepte bulunacağımızı ve yanıtı nasıl alacağımızı gördük. Bu bölüm, URL'nin başlık bölümü hakkında biraz daha bilgi verecektir. Öyleyse, aşağıdakilere bakacağız−

  • İstek Başlıklarını Anlama
  • Özel Başlıklar
  • Yanıt Başlıkları

İstek Başlıklarını Anlama

Tarayıcıdaki herhangi bir URL'ye basın, inceleyin ve geliştirici aracı ağ sekmesine bakın.

Yanıt başlıkları, istek başlıkları, yük vb. Alacaksınız.

Örneğin, aşağıdaki URL'yi düşünün−

https://jsonplaceholder.typicode.com/users

Başlık detaylarını aşağıdaki gibi alabilirsiniz−

Misal

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

Çıktı

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'}

Herhangi bir http başlığını okumak için bunu aşağıdaki gibi yapabilirsiniz−

getdata.headers["Content-Encoding"] // gzip

Özel Başlıklar

Ayrıca aşağıda gösterildiği gibi çağrılan URL'ye başlık gönderebilirsiniz.

Misal

import requests
headers = {'x-user': 'test123'}
getdata = requests.get('https://jsonplaceholder.typicode.com/users', headers=headers)

Aktarılan başlıklar dize, bytestring veya Unicode biçiminde olmalıdır. İsteğin davranışı, geçirilen özel başlıklara göre değişmeyecektir.

Yanıt Başlıkları

Tarayıcı geliştirici aracındaki ağ sekmesindeki URL'yi kontrol ettiğinizde yanıt başlıkları aşağıdaki gibi görünür−

İstekler modülünden başlıkların detaylarını almak için kullanın. Response.headers aşağıda gösterildiği gibidir−

Misal

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

Çıktı

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'}

İstediğiniz belirli bir başlığı aşağıdaki gibi alabilirsiniz−

print(getdata.headers["Expect-CT"])

Çıktı

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"))

Çıktı

max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/exp
ect-ct

İstekler - GET İsteklerini İşleme

Bu bölüm, en yaygın olan ve çok sık kullanılan GET isteklerine daha fazla odaklanacaktır. GET'in istekler modülünde çalışması çok kolaydır. GET yöntemini kullanarak URL ile çalışma hakkında basit bir örnek aşağıda verilmiştir.

Misal

import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users')
print(getdata.content)
getdata.content, will print all the data available in the response.

Çı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 }

Ayrıca, aşağıda gösterildiği gibi param özelliğini kullanarak parametreleri get yöntemine de aktarabilirsiniz

import requests
payload = {'id': 9, 'username': 'Delphine'}
getdata = requests.get('https://jsonplaceholder.typicode.com/users',
params=payload)
print(getdata.content)

Ayrıntılar, anahtar / değer çiftindeki nesne yükünde depolanır ve get () yöntemi içinde params'a iletilir.

Çıktı

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 ve DELETE Taleplerini İşleme

Bu bölümde, istek kitaplığını kullanarak POST yöntemini nasıl kullanacağımızı ve ayrıca parametreleri URL'ye nasıl ileteceğimizi anlayacağız.

POST kullanma

PUT isteği için, Requests kitaplığında request.post () yöntemi vardır, bunun örneği aşağıda gösterilmiştir:

ithalat istekleri

myurl = 'https://postman-echo.com/post'
myparams = {'name': 'ABC', 'email':'[email protected]'}
res = requests.post(myurl, data=myparams)
print(res.text)

Çıktı

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

Yukarıda gösterilen örnekte, form verilerini anahtar-değer çifti olarak istekler.post () içindeki veri parametresine iletebilirsiniz. İstekler modülünde PUT, PATCH ve DELETE ile nasıl çalışılacağını da göreceğiz.

PUT kullanma

PUT isteği için, Requests kitaplığında request.put () yöntemi vardır, bunun örneği aşağıda gösterilmiştir.

import requests
myurl = 'https://postman-echo.com/put'
myparams = {'name': 'ABC', 'email':'[email protected]'}
res = requests.put(myurl, data=myparams)
print(res.text)

Çıktı

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 kullanma

PATCH isteği için, Requests kitaplığında request.patch () yöntemi vardır, bunun örneği aşağıda gösterilmiştir.

import requests
myurl = https://postman-echo.com/patch'
res = requests.patch(myurl, data="testing patch")
print(res.text)

Çıktı

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 kullanma

DELETE isteği için, Requests kitaplığında request.delete () yöntemi vardır, bunun örneği aşağıda gösterilmiştir.

import requests
myurl = 'https://postman-echo.com/delete'
res = requests.delete(myurl, data="testing delete")
print(res.text)

Çıktı

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

İstekler - Dosya Yükleme

Bu bölümde, isteği kullanarak bir dosya yükleyeceğiz ve yüklenen dosyanın içeriğini okuyacağız. Bunu kullanarak yapabilirizfiles Aşağıdaki örnekte gösterildiği gibi param.

Kullanacağız http://httpbin.org/dosyayı yüklemek için yayınlayın.

Misal

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

Misal

var total = [0, 1, 2, 3].reduceRight(function(a, b){ return a + b; }); 
console.log("total is : " + total );

Çıktı

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

Dosyanın içeriğini aşağıda gösterildiği gibi göndermek de mümkündür−

Misal

import requests
myurl = 'https://httpbin.org/post'
files = {'file': ('test1.txt', 'Welcome to TutorialsPoint')}
getdata = requests.post(myurl, files=files)
print(getdata.text)

Çıktı

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

İstekler - Çerezlerle Çalışma

Bu bölümde çerezlerle nasıl başa çıkılacağı tartışılacaktır. İstek kitaplığını kullanarak URL'yi ararken çerezleri alabilir ve çerezlerinizi gönderebilirsiniz.

Url, https://jsonplaceholder.typicode.com/users tarayıcıya tıklandığında aşağıda gösterildiği gibi çerezlerin ayrıntılarını alabiliriz−

Çerezleri aşağıda gösterildiği gibi okuyabilirsiniz−

Misal

import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users')
print(getdata.cookies["__cfduid"])

Çıktı

E:\prequests>python makeRequest.py
d1733467caa1e3431fb7f768fa79ed3741575094848

Bir talepte bulunduğumuzda da çerez gönderebilirsiniz.

Misal

import requests
cookies = dict(test='test123')
getdata = requests.get('https://httpbin.org/cookies',cookies=cookies)
print(getdata.text)

Çıktı

E:\prequests>python makeRequest.py
{
   "cookies": {
   "test": "test123"
}
}

İstekler - Hatalarla Çalışma

Bu bölümde, Http istek kitaplığı ile çalışırken ortaya çıkan hataların nasıl ele alınacağı tartışılacaktır. Olası tüm durumlar için hataların yönetilmesi her zaman iyi bir uygulamadır.

Hata İstisnası

İstek modülü aşağıdaki hata istisnası türlerini verir−

ConnectionError- Herhangi bir bağlantı hatası varsa bu yükseltilecektir. Örneğin, ağ başarısız oldu, DNS hatası, bu nedenle İstek kitaplığı ConnectionError istisnasını artıracaktır.

Response.raise_for_status()- 401, 404 gibi durum koduna bağlı olarak, istenen url için HTTPError yükseltir.

HTTPError- Bu hata, yapılan istek için geçersiz bir yanıt gelmesi durumunda ortaya çıkacaktır.

Timeout- İstenen URL için zaman aşımı nedeniyle oluşan hatalar.

TooManyRedirects- Maksimum yeniden yönlendirme için sınır aşılırsa, TooManyRedirects hatası ortaya çıkar.

Misal

İşte zaman aşımı için gösterilen hataların bir örneği−

import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users',timeout=0.001)
print(getdata.text)

Çıktı

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)'))

İstekler - Zaman Aşımlarını İşleme

Zaman aşımları, istediğiniz URL'ye kolayca eklenebilir. Öyle oluyor ki, üçüncü taraf bir URL kullanıyorsunuz ve bir yanıt bekliyorsunuz. URL'nin bir zaman aralığı içinde bir yanıt veya bir hata ile yanıt vermesini isteyebileceğimiz için, URL'ye zaman aşımı vermek her zaman iyi bir uygulamadır. Bunu yapmamak, bu isteği süresiz olarak beklemeye neden olabilir.

Zaman aşımı parametresini kullanarak URL'ye zaman aşımı verebiliriz ve aşağıdaki örnekte gösterildiği gibi değer saniye cinsinden geçirilir−

Misal

import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users',timeout=0.001)
print(getdata.text)

Çıktı

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)'))

Verilen zaman aşımı aşağıdaki gibidir

getdata = requests.get('https://jsonplaceholder.typicode.com/users',timeout=0.001)

Yürütme, çıktıda gösterildiği gibi bağlantı zaman aşımı hatasını atar. Verilen zaman aşımı 0.001'dir, bu istek yanıtı geri almak için mümkün değildir ve bir hata verir. Şimdi, zaman aşımını artırıp kontrol edeceğiz.

Misal

import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users',timeout=1.000)
print(getdata.text)

Çıktı

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 saniyelik bir zaman aşımı ile talep edilen URL'nin cevabını alabiliriz.

İstekler - Yeniden Yönlendirmeyi İşleme

Bu bölüm, İstek kütüphanesinin url yeniden yönlendirme durumunu nasıl ele aldığına bir göz atacaktır.

Misal

import requests
getdata = requests.get('http://google.com/')
print(getdata.status_code)
print(getdata.history)

Url− http://google.com 301 (Kalıcı Olarak Taşındı) durum kodu kullanılarak şuraya yeniden yönlendirilecek: https://www.google.com/. Yönlendirme geçmişe kaydedilecektir.

Çıktı

Yukarıdaki kod çalıştırıldığında aşağıdaki sonucu alıyoruz

E:\prequests>python makeRequest.py
200
[<Response [301]>]

Bir URL'nin yeniden yönlendirilmesini şunu kullanarak durdurabilirsiniz: allow_redirects=False. Kullanılan GET, POST, OPTIONS, PUT, DELETE, PATCH yöntemleri üzerinde yapılabilir.

Misal

İşte aynı bir örnek.

import requests
getdata = requests.get('http://google.com/', allow_redirects=False)
print(getdata.status_code)
print(getdata.history)
print(getdata.text)

Şimdi çıktıyı kontrol ederseniz, yeniden yönlendirmeye izin verilmeyecek ve 301 durum kodu alacaktır.

Çıktı

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>

Talepler - İşleme Geçmişi

Kullanarak belirli bir URL'nin geçmişini alabilirsiniz response.history. Verilen URL'de herhangi bir yeniden yönlendirme varsa, aynı URL geçmişte saklanacaktır.

Tarih için

import requests
getdata = requests.get('http://google.com/')
print(getdata.status_code)
print(getdata.history)

Çıktı

E:\prequests>python makeRequest.py
200
[<Response [301]>]

response.historyözellik, isteğe göre yapılan yanıt nesnelerinin ayrıntılarına sahip olacaktır. Mevcut değerler, en eskiden en yeniye doğru sıralanır. response.history mülk, istenen URL'de yapılan tüm yeniden yönlendirmeyi izler.

İstekler - Oturumları Yönetme

İstekler arasındaki verileri korumak için oturumlara ihtiyacınız var. Dolayısıyla, aynı ana bilgisayar tekrar tekrar aranırsa, TCP bağlantısını yeniden kullanabilirsiniz, bu da performansı artıracaktır. Şimdi, oturumlar kullanılarak yapılan istekler arasında çerezlerin nasıl korunacağını görelim.

Oturum kullanarak tanımlama bilgileri ekleme

import requests
req = requests.Session()
cookies = dict(test='test123')
getdata = req.get('https://httpbin.org/cookies',cookies=cookies)
print(getdata.text)

Çıktı

E:\prequests>python makeRequest.py
{
   "cookies": {
   "test": "test123"
}
}

Oturumu kullanarak, çerez verilerini istekler arasında koruyabilirsiniz. Ayrıca, aşağıda gösterildiği gibi oturumu kullanarak başlık verilerini aktarmak da mümkündür−

Misal

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)

İstekler - SSL Sertifikası

SSL sertifikası, güvenli url'lerle birlikte gelen bir güvenlik özelliğidir. Requests kütüphanesini kullandığınızda, verilen https URL'si için SSL sertifikalarını da doğrular. SSL doğrulama, istek modülünde varsayılan olarak etkindir ve sertifika yoksa bir hata verir.

Güvenli URL ile çalışmak

Aşağıda güvenli URL ile çalışma örneği verilmiştir−

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

Çıktı

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

Yukarıdaki https URL'sinden kolayca bir yanıt alıyoruz ve bunun nedeni, istek modülünün SSL sertifikasını doğrulayabilmesidir.

Aşağıdaki örnekte gösterildiği gibi, sadece doğrulama = False ekleyerek SSL doğrulamasını devre dışı bırakabilirsiniz.

Misal

import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users', verify=False)
print(getdata.text)

Çıktıyı alacaksınız, ancak aynı zamanda SSL sertifikasının doğrulanmadığını ve sertifika doğrulamasının eklenmesinin önerildiğini belirten bir uyarı mesajı da verecektir.

Çıktı

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

Ayrıca SSL sertifikasını kendi ucunuzda barındırarak ve kullanarak yolu vererek doğrulayabilirsiniz. verify aşağıda gösterildiği gibi.

Misal

import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users', verify='C:\Users\AppData\Local\certificate.txt')
print(getdata.text)

Çıktı

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

İstekler - Kimlik Doğrulama

Bu bölüm, Requests modülünde bulunan kimlik doğrulama türlerini tartışacaktır.

Aşağıdakileri tartışacağız−

  • HTTP İsteklerinde Kimlik Doğrulamanın Çalışması

  • Temel Kimlik Doğrulama

  • Özet Kimlik Doğrulaması

  • OAuth2 Kimlik Doğrulaması

HTTP İsteklerinde Kimlik Doğrulamanın Çalışması

HTTP kimlik doğrulaması, istemci bir URL istediğinde kullanıcı adı, parola gibi bazı kimlik doğrulama bilgilerini isteyen sunucu tarafındadır. Bu, istek ve istemci ile sunucu arasında değiş tokuş edilen yanıt için ek güvenliktir.

İstemci tarafından bu ek kimlik doğrulama bilgileri, yani kullanıcı adı ve şifre başlıklarda gönderilebilir ve bunlar daha sonra sunucu tarafında doğrulanır. Yanıt, yalnızca kimlik doğrulama geçerli olduğunda sunucu tarafından teslim edilecektir.

İstek kitaplığı, temel kimlik doğrulama ( HTTPBasicAuth ) ve Özet Kimlik Doğrulama ( HTTPDigestAuth ) olan request.auth'da en yaygın kullanılan kimlik doğrulamasına sahiptir .

Temel Kimlik Doğrulama

Bu, sunucuya kimlik doğrulama sağlamanın en basit şeklidir. Temel kimlik doğrulamasıyla çalışmak için, istek kitaplığı ile kullanılabilen HTTPBasicAuth sınıfını kullanacağız.

Misal

İşte nasıl kullanılacağına dair çalışan bir örnek.

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'yi arıyoruz, https://httpbin.org/basic-auth/admin/admin123admin olarak kullanıcı ve admin123 olarak şifre ile .

Dolayısıyla, bu URL kimlik doğrulama, yani kullanıcı ve şifre olmadan çalışmayacaktır. Kimlik doğrulama parametresini kullanarak kimlik doğrulamasını verdiğinizde, yalnızca sunucu yanıtı geri verecektir.

Çıktı

E:\prequests>python makeRequest.py
{
   "authenticated": true,
   "user": "admin"
}

Özet Kimlik Doğrulaması

Bu, isteklerle birlikte kullanılabilen başka bir kimlik doğrulama biçimidir. İsteklerden HTTPDigestAuth sınıfını kullanacağız.

Misal

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)

Çıktı

E:\prequests>python makeRequest.py
{
   "authenticated": true,
   "user": "admin"
}

OAuth2 Kimlik Doğrulaması

OAuth2 Kimlik Doğrulamasını kullanmak için, "request_oauth2" kitaplığına ihtiyacımız var. "Request_oauth2" yüklemek için aşağıdakileri yapın−

pip install requests_oauth2

Kurulum sırasında terminalinizdeki ekran aşağıda gösterildiği gibi olacaktır−

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

"Request-oauth2" kurulumunu tamamladık. Google, Twitter API'lerini kullanmak için onun iznine ihtiyacımız var ve aynı işlem OAuth2 kimlik doğrulaması kullanılarak yapılır.

OAuth2 kimlik doğrulaması için İstemci Kimliği ve Gizli Anahtara ihtiyacımız olacak. Nasıl elde edileceğinin ayrıntıları,https://developers.google.com/identity/protocols/OAuth2.

Daha sonra, adresinde bulunan Google API Konsolu'na giriş yapın. https://console.developers.google.com/ve müşteri kimliğini ve gizli anahtarı alın.

Misal

İşte "request-oauth2" nin nasıl kullanılacağına dair bir örnek.

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 hesabına giriş yapması gerektiğinden verilen URL'ye yönlendirme yapamayacağız, ancak burada, örnekten google_auth'un çalıştığını ve yetkili URL'nin verildiğini göreceksiniz.

Çıktı

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

İstekler - Etkinlik Kancaları

Olay kancalarını kullanarak istenen URL'ye olaylar ekleyebiliriz. Aşağıdaki örnekte, yanıt mevcut olduğunda çağrılacak bir geri arama işlevi ekleyeceğiz.

Misal

Geri aramayı eklemek için, aşağıdaki örnekte gösterildiği gibi hooks parametresini kullanmamız gerekir−

mport requests
def printData(r, *args, **kwargs):
   print(r.url)
   print(r.text)
getdata = requests.get('https://jsonplaceholder.typicode.com/users', 
hooks={'response': printData})

Çıktı

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

Ayrıca, aşağıda gösterildiği gibi birden fazla geri arama işlevini de çağırabilirsiniz−

Misal

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]})

Çıktı

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

Kancayı aşağıda gösterildiği gibi oluşturulan Oturuma da ekleyebilirsiniz−

Misal

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')

Çıktı

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

İstekler - Proxy

Şimdiye kadar, istemcilerin doğrudan sunucuya bağlanıp konuştuğunu gördük. Proxy kullanarak etkileşim şu şekilde gerçekleşir−

  • İstemci, vekile bir istek gönderir.

  • Proxy, isteği sunucuya gönderir.

  • Sunucu, yanıtı vekile geri gönderir.

  • Vekil müşteriye bir yanıt gönderecektir.

Http-proxy kullanmak, istemci ile sunucu arasındaki veri alışverişini yönetmek için atanan ek güvenliktir. İstek kitaplıkları ayrıca aşağıda gösterildiği gibi proxy parametresini kullanarak proxy'yi işleme imkanına sahiptir−

Misal

import requests
proxies = {
'http': 'http://localhost:8080'
}
res = requests.get('http://httpbin.org/', proxies=proxies)
print(res.status_code)

İstek, ('http://localhost:8080 URL.

Çıktı

200

İstekler - İstekleri Kullanarak Web Kazıma

Python istek kitaplığını kullanarak belirli bir URL'den nasıl veri alabileceğimizi zaten görmüştük. Verileri şu siteden atmaya çalışacağız:Tutorialspoint hangisi mevcuttur https://www.tutorialspoint.com/tutorialslibrary.htm aşağıdakileri kullanarak−

  • İstek Kitaplığı

  • Python'dan güzel çorba kütüphanesi

Requests kütüphanesini zaten kurduk, şimdi Güzel çorba paketini kuralım. İşte resmi web sitesibeautiful soup mevcut https://www.crummy.com/software/BeautifulSoup/bs4/doc/ güzel çorbanın daha fazla işlevini keşfetmek istemeniz durumunda.

Beautifulsoup'u Kurmak

Beautiful Soup'un nasıl kurulacağını aşağıda göreceğiz−

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

Artık python istekleri kitaplığımız ve güzel çorbamız var.

Şimdi veriyi verilen URL'den ayıracak kodu yazalım.

Web kazıma

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'))

İstek kitaplığını kullanarak, içeriği verilen URL'den alabiliriz ve güzel çorba kitaplığı, onu ayrıştırmaya ve istediğimiz gibi ayrıntıları getirmeye yardımcı olur.

Html etiketi, sınıf, kimlik, css seçici ve daha birçok yolu kullanarak verileri almak için güzel bir çorba kitaplığı kullanabilirsiniz. Aşağıda, sayfanın başlığını ve ayrıca sayfadaki tüm h4 etiketlerini yazdırdığımız çıktı.

Çıktı

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>]