CodeGym /Kursy /Python SELF PL /Praktyczne wykorzystanie sieci

Praktyczne wykorzystanie sieci

Python SELF PL
Poziom 23 , Lekcja 3
Dostępny

4.1 Przetwarzanie odpowiedzi

Moduł requests oferuje wygodne metody do pracy z odpowiedziami serwera.

Kody statusu

Oprócz odpowiedzi, serwer przesyła również status przetwarzania żądania. Informacje o statusie znajdują się w polach status_code i reason. Przykład poniżej:


import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.status_code)  # Wyświetla kod statusu odpowiedzi
print(response.reason)  # Wyświetla opis tekstowy statusu
print(response.ok)  # Zwraca True, jeśli kod statusu jest mniejszy niż 400
        

Nagłówki

Czym byłoby żądanie HTTP bez nagłówków, prawda? Jeśli potrzebujesz nagłówków żądania lub odpowiedzi, możesz się do nich odwołać przez pole headers:


import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.headers)  # Wyświetla nagłówki odpowiedzi
print(response.headers['Content-Type'])  # Wyświetla wartość konkretnego nagłówka
            

Ciało odpowiedzi

Odpowiedź serwera może zawierać zestaw bajtów, tekst, json lub xml. Jeśli wiesz, czego konkretnie potrzebujesz od serwera, możesz od razu otrzymać obiekt odpowiedniego typu, używając jednego z metod/pól:


import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.text)  # Wyświetla ciało odpowiedzi jako tekst
print(response.json())  # Wyświetla ciało odpowiedzi w formacie JSON
print(response.content)  # Wyświetla ciało odpowiedzi jako bajty
        

Więcej o nagłówkach (headers) i statusach odpowiedzi dowiesz się z wykładów o działaniu sieci.

4.2 Przetwarzanie błędów

Moduł requests zapewnia wyjątki do przetwarzania błędów.

Standard HTTP nie przewiduje wyjątków, zamiast tego operuje kodami błędów (status_code). Jeśli chcesz, aby w wyniku nieudanego żądania został wygenerowany wyjątek Pythona, musisz jawnie wywołać funkcję raise_for_status().

Przykład:


import requests

try:
    response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
    response.raise_for_status()  # Generuje wyjątek dla kodów statusu 4xx i 5xx
except requests.exceptions.HTTPError as err:
    print(f"HTTP error occurred: {err}")
except Exception as err:
    print(f"Other error occurred: {err}")
else:
    print("Success!")
        

Więcej o kodach błędów dowiesz się z wykładów o działaniu sieci.

4.3 Wysyłanie danych

Przed wynalezieniem JSON duże ilości danych wysyłano za pomocą "formularzy". Formularz to specjalny obiekt strony przeglądarki (i standard danych w HTTP). Jeśli chcesz wysłać dane "za pomocą formularza", musisz po prostu przekazać parametr data z żądaniem.

Ważne! Żądania GET nie obsługują formularzy, ponieważ nie mają ciała żądania. Wszystkie ich dane przekazywane są tylko w URL.

Wysyłanie danych w GET-requests

W GET-requests dane przekazywane są przez parametry URL. Oto przykład:


import requests

params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://httpbin.org/get', params=params)
print(response.url)  # Wyświetli URL z dodanymi parametrami
    

Wysyłanie danych formularzy

Użyjemy POST-request, aby wysłać dane na serwer.

Przykład:


import requests

data = {
    'username': 'example',
    'password': 'password'
}
response = requests.post('https://httpbin.org/post', data=data)
print(response.json())
        

Wysyłanie plików

Jeśli chcesz wysłać przez internet dane binarne, na przykład, przesłać obraz, musisz przekazać swój plik lub pliki w żądaniu za pomocą parametru files.

Przykład:


import requests

files = {'file': open('example.txt', 'rb')}
response = requests.post('https://httpbin.org/post', files=files)
print(response.json())
        

Prosto jak drut. Jeśli chcesz wysłać kilka plików, to wymień je pod dowolnymi nazwami w zmiennej files.

Ważne! Nie zapomnij zamknąć pliku po wysłaniu, aby uniknąć wycieków zasobów. Najlepiej używać konstrukcji with, która automatycznie zamknie plik po zakończeniu operacji:


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 Logowanie i autoryzacja

API (Application Programming Interface) to zbiór zasad i protokołów, które umożliwiają różnym programom współpracę ze sobą. Wiele stron i serwisów pozwala wysyłać im żądania i pracować z ich API tylko po zalogowaniu się.

Po pomyślnym zalogowaniu otrzymujesz specjalny obiekt – sesję (session), która zawiera unikalny numer twojej „autoryzowanej sesji z serwerem”. Do dalszych żądań musisz używać tego obiektu.

Uwierzytelnianie

Aby zalogować się na serwer, trzeba przejść przez proces uwierzytelniania (logowania), w tym celu należy przekazać z żądaniem dane uwierzytelniające.


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)
        
    

Tak wygląda proces autoryzacji, ale zazwyczaj używa się go razem z sesją.

Używanie sesji

Sesje pozwalają zachować parametry pomiędzy żądaniami, takie jak cookies czy informacje o autoryzacji użytkownika.


import requests

payload = {
    'username': 'your_username',
    'password': 'your_password'
}
            
# Tworzenie sesji
session = requests.Session()
            
# Logowanie do strony
login_response = session.post('https://example.com/login', data = payload)
            
# Dalsza praca w ramach sesji zalogowanego użytkownika
data_response = session.get('https://example.com/api/data')
print(data_response.json())
        
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION