CodeGym /Kurslar /Python SELF AZ /Şəbəkə ilə işləmə praktiki olaraq

Şəbəkə ilə işləmə praktiki olaraq

Python SELF AZ
Səviyyə , Dərs
Mövcuddur

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_codereason 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())
        
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION