4.1 Обробка відповідей
Модуль requests
надає зручні методи для
роботи з відповідями сервера.
Статус-коди
Крім відповіді, сервер ще надсилає статус обробки запиту.
Інформація про статус міститься в полях
status_code
і reason
. Приклад нижче:
import requests
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.status_code) # Виводить статус-код відповіді
print(response.reason) # Виводить текстовий опис статусу
print(response.ok) # Повертає True, якщо статус-код менше 400
Заголовки
Ну і звісно, який HTTP-запит без заголовків? Якщо вам потрібні
заголовки запиту або заголовки відповіді, то до них можна звернутись
через поле headers
:
import requests
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.headers) # Виводить заголовки відповіді
print(response.headers['Content-Type']) # Виводить значення конкретного заголовка
Тіло відповіді
Відповідь сервера може містити набір байтів, текст, json
або xml
. Якщо
ви знаєте, що саме ви запитуєте у сервера, то можете одразу
отримати об'єкт потрібного типу, скориставшись одним з
методів/полів:
import requests
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.text) # Виводить тіло відповіді у вигляді тексту
print(response.json()) # Виводить тіло відповіді у вигляді JSON
print(response.content) # Виводить тіло відповіді у вигляді байтів
Детальніше про заголовки (headers)
і статуси відповіді ви дізнаєтеся в
лекціях про пристрій мережі.
4.2 Обробка помилок
Модуль requests
надає винятки для
обробки помилок.
HTTP-стандарт не передбачає винятків, замість цього він працює
з кодами помилок (status_code)
. Якщо ви хочете, щоб у результаті
невдалого запиту було згенеровано виняток Python, вам потрібно
явно викликати функцію raise_for_status()
.
Приклад:
import requests
try:
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
response.raise_for_status() # Генерує виняток для статус-кодів 4xx і 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!")
Детальніше про коди помилок ви можете дізнатися з лекцій про пристрій мережі.
4.3 Відправка даних
До винаходу JSON великі обсяги даних відправлялись за допомогою
«форми». Форма – це спеціальний об'єкт сторінки браузера (і
стандарт даних в HTTP). Якщо ви хочете відправити дані
«з допомогою форми», то вам потрібно просто разом з запитом передати
параметр data
.
Важливо!
GET-запити не підтримують
форми, оскільки не містять тіла запиту. Всі їх дані передаються
тільки в URL.
Відправка даних в GET-запиті
В GET-запиті дані передаються через параметри URL. Ось приклад:
import requests
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://httpbin.org/get', params=params)
print(response.url) # Виведе URL з доданими параметрами
Відправка даних форми
Ми скористаємося POST-запитом
, щоб відправити дані на сервер.
Приклад:
import requests
data = {
'username': 'example',
'password': 'password'
}
response = requests.post('https://httpbin.org/post', data=data)
print(response.json())
Відправка файлів
Якщо ви хочете відправити в інтернет бінарні дані, наприклад,
завантажити картинку, то для цього вам потрібно передати ваш файл або файли
в запит за допомогою параметра files
.
Приклад:
import requests
files = {'file': open('example.txt', 'rb')}
response = requests.post('https://httpbin.org/post', files=files)
print(response.json())
Просто як двічі два. Якщо ви хочете відправити декілька файлів, то
перерахуйте їх під будь-якими іменами в змінній
files
.
Важливо!
Не забувайте закривати файл після відправки, щоб уникнути витоку ресурсів.
Найкраще використовувати конструкцію with
, яка автоматично закриє файл після завершення операції:
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 Логін і авторизація
API (Application Programming Interface) – це набір правил і протоколів, які дозволяють різним програмам взаємодіяти один з одним. Дуже багато сайтів і сервісів дозволяють відправляти їм запити і працювати з їх API тільки після логіна.
Після успішного логіна ви отримуєте спеціальний об'єкт – сесію (session)
, який містить унікальний номер
вашої «авторизованої сесії з сервером». Для подальших запитів вам потрібно буде використовувати цей об'єкт.
Аутентифікація
Для того, щоб залогінитися на сервер, потрібно пройти аутентифікацію (процес логіна), для чого вам потрібно передати з запитом облікові дані.
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)
Так виглядає процес авторизації, але зазвичай його використовують разом з сесією.
Використання сесій
Сесії дозволяють зберігати параметри між запитами, такі як cookies
або інформація про авторизацію
користувача.
import requests
payload = {
'username': 'your_username',
'password': 'your_password'
}
# Створення сесії
session = requests.Session()
# Логін на сайт
login_response = session.post('https://example.com/login', data = payload)
# Подальша робота під сесією залогіненого користувача
data_response = session.get('https://example.com/api/data')
print(data_response.json())
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ