JavaRush /Курсы /Модуль 1: Python Core /Работа с сетью на практике

Работа с сетью на практике

Модуль 1: Python Core
13 уровень , 3 лекция
Открыта

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
Комментарии (10)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Slevin Уровень 64
10 июля 2025
"вы узнаете в лекциях про устройство сети." И где я должен найти эту "лекцию про устройство сетей"? В оглавлении к курсу я ничего подобного не вижу.
Дмитрий Уровень 27
14 мая 2025
А задач на сессии не будет, что ли?
Sergey Akifev Уровень 52
18 января 2025
Кому нужно быстро разобраться в основах работы сетей, то советую Андрея Созыкина на youtube
Александр Уровень 47
30 августа 2024
неплохо бы рассказать про то как сеть работает перед тем как вот это все
Денис Уровень 33
5 января 2025
Ну а если серьёзно, то это что-то из области общих знаний так то. Учиться программировать не имея базовых знаний о работе комьютера это как строить дом не зная о цементе и кирпичах. Шалашик конечно построить можно, но смысл?
Сергей Уровень 25
6 января 2025
Если по каждой теме давать ссылки на на книги аля этой, то на этом все и закончится. Люди просят ссылки на относительно короткие и простые для понимания статьи по тематике лекции. Скажу так, этот курс просто ужасен по сравнению с аналогчным по Java. Очень низкое качество самих лекций, задач кот наплакал такого же низкого качества, ссылок на доп материалы по теме совсем нет, сплошное разочарование...
Денис Уровень 33
6 января 2025
Ну тут смотря с какой стороны этот курс оценивать :) Мне - ок, сжатый конспект лекций на тему "как это сделать в питоне". Я так понял что этот курс не рассматривается как Stand alone материал, скорее как домашка для подписки Универ, а там типа есть менторы и люди которые это все уже объяснят нормально. Но я хз так ли это. Конечно для начинающих все очень плохо :) Переход от "Hello World" к TCP\UDP мягко говоря незаметный :) А что до книги... ну давай будем откровенны, не все можно объяснить сжато. То что можно прочитать пару абзацев про основные HTTP запросы не добавит понимания того "как сеть работает" (с) Если бы инженером можно было стать за месяц - специалисты стоили бы сильно дешевле.
Сергей Уровень 25
6 января 2025
Я курс оцениваю относительно курса по java, конечно сейчас тут все усложнили в плане деления на курс, универ и тд.. по java помню когда проходил, купил подписку премиум и все, чтобы прокачаться неплохо, вполне достаточно было, правда тогда не было модулей про hibernate и spring, но полученных скилов хватило чтобы разбираться дальше самостоятельно. А этот курс, согласен - посмотреть как это сделано в питоне, но тем кто совсем не инженер сложновато.
Денис Уровень 33
6 января 2025
Java курс тут действительно сильно лучше) там тоже много не было, но сам подход отличался, гоняли по алгоритмам, структурам данных, инструментам языка. К некоторым темам возвращались освещая их глубже. Хотя если посмотреть раздел вопросы - там тоже у людей много проблем :) и много бурления на тему "мы этава нипрахадили". Так что "разобраться самому" это скорее от человека зависит, а не курса.
UnknownReboot Уровень 30
14 марта 2025
Спасибо большое за книгу, надо почитать!