Работа с сетью в Python
Библиотека requests является стандартом де-факто для выполнения HTTP-запросов в Python. Она прячет сложности выполнения сетевых запросов за маской красивого и простого API, чтобы вы могли непосредственно сосредоточиться использовании данных в разрабатываемом приложении.
В этой статье вы узнаете о некоторых наиболее полезных функциях, которые есть в requests , а также о том, как использовать эти функции для различных случаев, с которыми вы можете столкнуться. Вы также узнаете, как эффективно использовать requests, а также как предотвратить задержку в работе приложений при взаимодействии с внешними службами.
Установим библиотеку requests . Для этого выполните в консоли следующую команду:
pip install requests
Подключаем так:
import requests
Теперь, когда мы все настроили, пришло время научиться делать GET-запросы.
Одним из наиболее распространенных HTTP методов является GET. Метод GET предназначен для получения данных из указанного ресурса. Чтобы сделать GET-запрос , вызовите requests.get():
>>> requests.get('https://srs.myrusakov.ru')
<Response [200]>
Ответ запроса
Response - является объектом, возвращаемым в результате запроса. Давайте сделаем тот же запрос еще раз, но на этот раз сохраним возвращаемое значение в переменной, чтобы лучше познакомиться с его атрибутами и поведением:
>>> response = requests.get('https://srs.myrusakov.ru')
В этом примере мы сохранили в переменной с именем response возвращаемое функцией get() значение, которое является экземпляром объекта Response. Теперь мы можем использовать response чтобы увидеть информацию о результатах запроса.
Коды состояния
Первым видом информации, которую мы можем получить из Response является код состояния. Код состояния информирует нас о статусе запроса.
Например, статус 200 OK означает, что запрос был успешным, а статус 404 NOT FOUND означает, что файл не найден. Это самые базовые коды состояний.
Чтобы увидеть код состояния, который вернул сервер надо выполнить следующий код:
>>> response.status_code
Результат свойства status_code - 200 , что означает, что запрос был успешным, и сервер ответил данными, которые вы запрашивали.
Иногда можно использовать статус кода для принятия решений в коде:
if response.status_code == 200:
print('Успех!')
elif response.status_code == 404:
print('Нет ничего')
Библиотека requests еще более упрощает процесса условного выбора. Если вы используете экземпляр Response в условном выражении, он оценивается как True (Правда), если код состояния между 200 и 400 , и False (Ложь) в противном случае.
Таким образом, вы можете упростить последний пример, переписав оператор if :
if response:
print('Успех!')
esle:
print('Нет ничего')
Имейте в виду, что этот метод не проверяет, что код состояния ровно равен 200. Причиной этого является то, что другие коды состояния в диапазоне от 200 до 400 , такие как 204 NO CONTENT и 304 NOT MODIFIED , также считаются успешными в том смысле, что они обеспечивают некоторый осуществимый ответ.
Например, 204 сообщает вам, что ответ был успешным, но в теле сообщения нет содержимого для возврата.
Поэтому убедитесь, что вы используете этот удобный способ записи, только если вы хотите узнать, был ли запрос в целом успешным, а затем, при необходимости, обработайте ответ соответствующим образом на основе кода состояния.
Допустим, вы не хотите проверять код состояния ответа в операторе if . Вместо этого вы хотите вызвать исключение, если запрос был неудачным. Вы можете сделать это с помощью .raise_for_status() :
import requests
from requests.exceptions import HTTPError
for url in ['https://myrusakov.ru', 'https://myrusakov.ru/net-takogo-faila']:
try:
response = requests.get(url)
# если запрос выполнился успешно ничего не происходит
# в противном случае ошибка
response.raise_for_status()
except HTTPError as error_http:
print(f'HTTP ошибка: {http_err}')
except Exception as error_other:
print(f'Еще какая-то ошибка: {err}')
else:
print('Ух ты!')
Если вы вызываете .raise_for_status() , HTTPError будет вызываться для определенных кодов состояний. Если код состояния указывает на успешный запрос, программа продолжит работу без возникновения этого исключения.
Таким образом, Python библиотека requests предоставляет нам очень широкие возможности по работе с сетью. Обязательно рекомендую Вам поэкспериментировать со свойствами объекта Response и тщательно с ними разобраться. На этом на сегодня все.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.