Requests в Python – примеры запросов | OTUS

Requests в Python – примеры запросов

В языке программирования Python существует библиотека requests. Это стандартный инструмент, который используют для составления HTTP-запросов. Согласно документации, библиотека Requests позволяет:

• создавать запросы посредством наиболее популярных HTTP-методов; • редактировать заголовки запросов и данных с помощью строки запроса, а также содержимого сообщения; • анализировать данные запросов и откликов; • создавать авторизированные запросы; • настраивать запросы с целью предотвращения сбоев и замедлений в работе приложения.

Установка библиотеки requests на Python

Работа начинается с установки библиотеки requests. Для этого подойдёт следующая команда:

    $ pip install requests

Если вы используете виртуальную среду Pipenv, команда будет немного другой:

    $ pipenv install requests

Когда установка выполнена, вы можете переходить в среду разработки и полноценно использовать requests в приложении, предварительно выполнив импорт requests:

    import 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 [200]>

Объект Response — получаем ответ на запрос в Python

Response — мощный объект, предназначенный для анализа результатов запроса.

    response = requests.get('https://api.github.com')

В вышеописанном примере мы использовали get() для захвата определённого значения, являющегося частью объекта Response, с последующим помещением этого значения в переменную response. Теперь мы получили возможность использовать переменную response для изучения данных, полученных в результате отправки запроса GET.

HTTP-коды состояний

Первые данные, которые мы получим посредством Response, будут коды состояния. Они сообщают о статусе нашего запроса.

К примеру, статус 200 OK означает, что запрос был успешно выполнен. А известная всем ошибка 404 NOT FOUND скажет нам, что запрашиваемый ресурс найден не был. Таких статусных информационных кодов существует довольно много.

Давайте с помощью .status_code, увидим код состояния, возвращаемый с сервера.

    >>> response.status_code
200

В нашем случае .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. Вот, как это может выглядеть:

    >>> response.headers
{'Server': 'GitHub.com', 'Date': 'Mon, 10 Dec 2018 17:49:54 GMT', 'Content-Type': 'application/json; charset=utf-8', 'Transfer-Encoding': 'chunked', 'Status': '200 OK', 'X-RateLimit-Limit': '60', 'X-RateLimit-Remaining': '59', 'X-RateLimit-Reset': '1544467794', 'Cache-Control': 'public, max-age=60, s-maxage=60', 'Vary': 'Accept', 'ETag': 'W/"7dc470913f1fe9bb6c7355b50a0737bc"', 'X-GitHub-Media-Type': 'github.v3; format=json', 'Access-Control-Expose-Headers': 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type', 'Access-Control-Allow-Origin': '*', 'Strict-Transport-Security': 'max-age=31536000; includeSubdomains; preload', 'X-Frame-Options': 'deny', 'X-Content-Type-Options': 'nosniff', 'X-XSS-Protection': '1; mode=block', 'Referrer-Policy': 'origin-when-cross-origin, strict-origin-when-cross-origin', 'Content-Security-Policy': "default-src 'none'", 'Content-Encoding': 'gzip', 'X-GitHub-Request-Id': 'E439:4581:CF2351:1CA3E06:5C0EA741'}

Заголовок .headers возвращает словарь и предоставляет доступ к значению HTTP-заголовка по ключу. К примеру, чтобы посмотреть тип содержимого ответного payload, надо использовать Content-Type.

    >>> response.headers['Content-Type']
'application/json; charset=utf-8'

Согласно специфике HTTP, заголовки являются нечувствительными к регистру. Таким образом, при получении доступа к заголовкам мы можем не беспокоиться о том, какие буквы использованы: строчные либо прописные.

Это лишь базовые знания по теме библиотеки Requests в Python и HTTP-заголовков. Если хотите знать больше, вам могут быть полезны следующие статьи: — «Requests в Python – Примеры выполнения HTTP-запросов»; — «Краткое руководство по библиотеке Python Requests».

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто