JavaRush/Java курси/Модуль 1: Python Core/Робота з мережею на практиці

Робота з мережею на практиці

Відкрита

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())
2
Задача
Модуль 1: Python Core,  13 рівень3 лекція
Недоступна
Обробка відповідей сервера з модулем requests
Обробка відповідей сервера з модулем requests
2
Задача
Модуль 1: Python Core,  13 рівень3 лекція
Недоступна
Обробка помилок запитів з модулем requests
Обробка помилок запитів з модулем requests
Коментарі
  • популярні
  • нові
  • старі
Щоб залишити коментар, потрібно ввійти в систему
Для цієї сторінки немає коментарів.