Requests в Python – примеры запросов
В языке программирования Python существует библиотека requests. Это стандартный инструмент, который используют для составления HTTP-запросов. Согласно документации, библиотека Requests позволяет:
• создавать запросы посредством наиболее популярных HTTP-методов; • редактировать заголовки запросов и данных с помощью строки запроса, а также содержимого сообщения; • анализировать данные запросов и откликов; • создавать авторизированные запросы; • настраивать запросы с целью предотвращения сбоев и замедлений в работе приложения.
Установка библиотеки requests на Python
Работа начинается с установки библиотеки requests. Для этого подойдёт следующая команда:
Если вы используете виртуальную среду Pipenv, команда будет немного другой:
Когда установка выполнена, вы можете переходить в среду разработки и полноценно использовать requests в приложении, предварительно выполнив импорт requests:
Итак, подготовительные действия выполнены, поэтому можно переходить к изучению requests. Начать лучше с запроса GET.
Python Requests и метод GET
Как вы, наверное, знаете, существуют HTTP-методы GET и POST. Они определяют, какие конкретно действия выполнятся при формировании HTTP-запроса. Есть и другие методы: POST, DELETE, HEAD, PUT, PATCH и OPTIONS. И для каждого из них определена своя сигнатура.
Самый популярный запрос — GET. Он указывает, что осуществляется попытка извлечь данные из какого-нибудь ресурса. Для выполнения этого запроса используют команду requests.get() .
Вот, например, как выглядит запрос GET в отношении Root REST API на GitHub:
requests.get(‘https://api.github.com’)
Объект Response — получаем ответ на запрос в Python
Response — мощный объект, предназначенный для анализа результатов запроса.
response = requests.get('https://api.github.com')В вышеописанном примере мы использовали get() для захвата определённого значения, являющегося частью объекта Response, с последующим помещением этого значения в переменную response. Теперь мы получили возможность использовать переменную response для изучения данных, полученных в результате отправки запроса GET.
HTTP-коды состояний
Первые данные, которые мы получим посредством Response, будут коды состояния. Они сообщают о статусе нашего запроса.
К примеру, статус 200 OK означает, что запрос был успешно выполнен. А известная всем ошибка 404 NOT FOUND скажет нам, что запрашиваемый ресурс найден не был. Таких статусных информационных кодов существует довольно много.
Давайте с помощью .status_code, увидим код состояния, возвращаемый с сервера.
В нашем случае .status_code вернул 200, что означает успешно выполненный запрос. Кстати, иногда полученная информация используется при написании кода:
if response.status_code == 200: print('Success!') elif response.status_code == 404: print('Not Found.')Получаем содержимое страницы в Requests
Нередко ответ на GET-запрос включает в себя довольно ценную информацию. Эта информация находится в теле сообщения и её называют payload. Применяя атрибуты и методы библиотеки Response, мы сможем получить payload в разных форматах.
Если хотим получить содержимое запроса в байтах, нужно использовать .content.
>>> response = requests.get('https://api.github.com') >>> response.contentПрименение .content обеспечивает нам доступ к любым данным в теле запроса. Но нередко надо конвертировать полученные данные в строку с кодировкой UTF-8. Для этого выполняем команду response.text. По умолчанию requests пытается узнать текущую кодировку по заголовкам HTTP. Но мы можем указать нужную кодировку путём добавления перед .text .encoding.
>>> response.encoding = 'utf-8' # Optional: requests infers this internally >>> response.textЗаголовки HTTP в Requests
HTTP-заголовки ответов на запросы тоже могут дать нам полезную информацию. Например, тип содержимого ответного payload либо ограничения по времени для кэширования ответа. Чтобы посмотреть заголовок, надо заглянуть в атрибут .headers. Вот, как это может выглядеть:
Заголовок .headers возвращает словарь и предоставляет доступ к значению HTTP-заголовка по ключу. К примеру, чтобы посмотреть тип содержимого ответного payload, надо использовать Content-Type.
>>> response.headers['Content-Type'] 'application/json; charset=utf-8'Согласно специфике HTTP, заголовки являются нечувствительными к регистру. Таким образом, при получении доступа к заголовкам мы можем не беспокоиться о том, какие буквы использованы: строчные либо прописные.
Это лишь базовые знания по теме библиотеки Requests в Python и HTTP-заголовков. Если хотите знать больше, вам могут быть полезны следующие статьи: — «Requests в Python – Примеры выполнения HTTP-запросов»; — «Краткое руководство по библиотеке Python Requests».