4.1 Cavabların emalı
requests
modulu server cavabları ilə işləmək üçün əlverişli metodlar təqdim edir.
Status-kodlar
Cavabdan əlavə, server sorğunun emalı statusunu da göndərir. Status haqqında məlumat status_code
və reason
sahələrində var. Aşağıdakı nümunəyə bax:
import requests
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.status_code) # Cavabın status-kodunu çap edir
print(response.reason) # Statusun verbal izahını çap edir
print(response.ok) # Status-kod 400-dən aşağıdırsa True qaytarır
Başlıqlar
HTTP sorğusu başlıqlar olmadan necə ola bilər ki? Əgər sizə sorğunun başlıqları və ya cavabın başlıqları lazımdırsa, onlara headers
sahəsi vasitəsilə müraciət edə bilərsiniz:
import requests
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.headers) # Cavabın başlıqlarını çap edir
print(response.headers['Content-Type']) # Müəyyən başlığın dəyərini çap edir
Cavabın məzmunu
Serverin cavabı baytlar toplusu, mətn, json
və ya xml
ola bilər. Əgər serverdən nə soruşduğunuzu dəqiq bilirsinizsə, birbaşa ehtiyac duyduğunuz tipdə obyekt ala bilərsiniz, aşağıdakı metodlar/sahələrdən istifadə edərək:
import requests
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.text) # Cavabın məzmununu mətn şəklində çap edir
print(response.json()) # Cavabın məzmununu JSON şəklində çap edir
print(response.content) # Cavabın məzmununu baytlar şəklində çap edir
Başlıqlar (headers
) və cavab statusları haqqında daha ətraflı məlumatları şəbəkənin quruluşu haqqında mühazirələrdə öyrənəcəksiniz.
4.2 Xətaların emalı
requests
modulu xətaların emalı üçün xüsusi istisnalar təqdim edir.
HTTP-standartında istisnalar nəzərdə tutulmur, bunun yerinə (status_code)
kimi xətaların kodları ilə işləyir. Əgər siz uğursuz sorğu nəticəsində Python-da bir istisna yaranmasını istəyirsinizsə, mütləq raise_for_status()
funksiyasını çağırmalısınız.
Nümunə:
import requests
try:
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
response.raise_for_status() # 4xx və 5xx status-kodları üçün istisna yaradır
except requests.exceptions.HTTPError as err:
print(f"HTTP səhvi baş verdi: {err}")
except Exception as err:
print(f"Başqa bir səhv baş verdi: {err}")
else:
print("Uğur!")
Xətaların kodları haqqında daha ətraflı şəbəkə quruluşuna aid mühazirələrdən öyrənə bilərsiniz.
4.3 Məlumatların Göndərilməsi
JSON icad olunmadan əvvəl böyük həcmdə məlumatlar "forma" vasitəsilə göndərilirdi. Forma – bu, brauzer səhifəsinin xüsusi obyekti (və HTTP-də məlumat standarti). Əgər siz məlumatları "forma vasitəsilə" göndərmək istəyirsinizsə, sorğu ilə birlikdə sadəcə data
parametrini ötürməyiniz kifayətdir.
Vacibdir!
GET-sorğular formaları dəstəkləmir, çünki sorğunun gövdəsini (body) ehtiva etmir. Onların bütün məlumatları yalnız URL-də ötürülür.
GET-sorğusunda
məlumatların göndərilməsi
GET-sorğusunda
məlumatlar URL parametrləri vasitəsilə ötürülür. Məsələn:
import requests
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://httpbin.org/get', params=params)
print(response.url) # Parametrlərin əlavə edildiyi URL çıxacaq
Formaların göndərilməsi
Biz POST-sorğusundan
istifadə edəcəyik ki, məlumatları serverə göndərək.
Məsələn:
import requests
data = {
'username': 'example',
'password': 'password'
}
response = requests.post('https://httpbin.org/post', data=data)
print(response.json())
Faylların göndərilməsi
Əgər siz internetə binar məlumatları, məsələn, şəkil yükləmək istəyirsinizsə, faylınızı və ya fayllarınızı sorğuya files
parametri ilə ötürməniz lazımdır.
Məsələn:
import requests
files = {'file': open('example.txt', 'rb')}
response = requests.post('https://httpbin.org/post', files=files)
print(response.json())
Bu, çox sadədir. Əgər siz bir neçə fayl göndərmək istəyirsinizsə, onları istənilən adlar altında files
dəyişənində sadalayın.
Vacibdir!
Faylı göndərdikdən sonra onu bağlamağı unutmayın ki, resurs sızıntısından qaçınasınız. Ən yaxşısı with
konstruksiyasından istifadə etməkdir, o, əməliyyat başa çatdıqdan sonra faylı avtomatik olaraq bağlayacaq:
import requests
with open('example.txt', 'rb') as f:
files = {'file': f}
response = requests.post('https://httpbin.org/post', files=files)
print(response.json())
4.4 Login və avtorizasiya
API (Application Programming Interface) – bu, müxtəlif proqramların bir-biri ilə qarşılıqlı əlaqə qurmasını təmin edən qayda və protokollar toplusudur. Çox sayda sayt və xidmətlər yalnız login edildikdən sonra onlara sorğular göndərməyə və onların API ilə işləməyə icazə verir.
Uğurlu login prosesindən sonra siz xüsusi bir obyekt alırsınız – sessiya (session)
, bu obyekt sizin «serverlə avtorizasiya olunmuş sessiyanızın unikal nömrəsini» özündə saxlayır. Gələcək sorğular üçün bu obyektdən istifadə etməli olacaqsınız.
Autentifikasiya
Serverə login etmək üçün siz autentifikasiyadan keçməlisiniz (login prosesi). Bu zaman siz sorğuyla birlikdə hesaba daxilolma məlumatları göndərməlisiniz.
import requests
from requests.auth import HTTPBasicAuth
response = requests.get('https://httpbin.org/basic-auth/user/pass', \
auth=HTTPBasicAuth('user', 'pass'))
print(response.status_code)
Avtorizasiya prosesi belə görünür, amma adətən onu sessiya ilə birlikdə istifadə edirlər.
Sessiyaların istifadəsi
Sessiyalar cookies
və ya istifadəçi avtorizasiyası barədə məlumat kimi parametrləri sorğular arasında saxlamaya imkan verir.
import requests
payload = {
'username': 'your_username',
'password': 'your_password'
}
# Sessiyanın yaradılması
session = requests.Session()
# Sayta login olunması
login_response = session.post('https://example.com/login', data = payload)
# Login olunmuş istifadəçinin sessiyası ilə növbəti işlər
data_response = session.get('https://example.com/api/data')
print(data_response.json())
GO TO FULL VERSION