Изучаем библиотеку Python Requests: GET-запросы

В данной статье мы рассмотрим библиотеку Python Requests, которая может отправлять HTTP-запросы в Python.

Работа API основана на отправке HTTP-запросов и получение ответов. Библиотека Requests может использовать API в Python. В виде примера я продемонстрирую принцип работы Translate API.

Краткий обзор HTTP-запросов

Каждый раз, когда вы переходите на веб-страницу, браузер отправляет пару запросов на сервер. В ответ он отсылает данные для рендеринга страницы, которые браузер использует для ее выведения.

Механизмы работает следующим образом: покупатель(к примеру, браузер или скрипт Python, использующий библиотеку Requests) отправляет данные на сервер, расположенный по указанному URL. Сервер обрабатывает полученную информацию и возвращает ответ покупателю.

В запросе покупатель также указывает, какой способ будет использован для передачи. Самые распространенные способы: GET, POST и PUT.

GET-запросы предназначены только для чтения данных без внесения каких-либо изменений. POST и PUT-запросы предназначены для изменения данных на сервере. Так, например, Stripe API применяет POST-запросы для создания новых платежей, чтобы посетитель мог что-то купить в приложении.

В данной статье рассматриваются только запросы GET, так как мы не будем изменять отправляемые данные на сервере.

Устанавливаем Python Requests

Прежде всего, установим библиотеку Python Requests, используя менеджер пакетов pip. Сначала создайте виртуальную среду.

pip install requests

Наш первый запрос

Для начала используем библиотеку Python Requests для чего-то простого: отправим запрос на веб-сайт Scotch.io. Создайте файл script.py и добавьте в него приведенный ниже программный код.

import requestsres = requests.get('https://scotch.io')print(res)

Приведенный выше программный код отправляет запрос GET на Scotch.io. Это тот же тип запроса, который браузер отправляет для просмотра веб-страницы. Отличие заключается в том, что данные запросы не могут передать HTML. Так что вместо него приходит необработанный HTML и другая информация из ответа, предоставленного сервером.

В данном случае мы используем возможность.get(). Но библиотека Requests включает и иные подобные возможности:.post() и.put().

Запустите файл script.py.

python script.py

В ответ придет следующее:

Изучаем библиотеку Python Requests: GET-запросы

Коды состояния

Проверим программный код состояния ответа. Коды состояния HTTP варьируются от 1XX до 5XX. Скорее всего, вы сталкивались с кодами состояния 200, 404 и 500.

Что обозначает каждый из них:

  • 1XX – информация.
  • 2XX – успешно.
  • 3XX – перенаправление.
  • 4XX — Ошибка покупателя.
  • 5XX — Ошибка сервера.

Обычно при выполнении запросов приходят коды состояния 2ХХ. Коды 4XX и 5XX являются ошибками. При их получении ответ расценивается как False.

Вы можете легко проверить результативность запроса при помощи следующего кода:

if res: print('Response OK')else: print('Response Failed')
Изучаем библиотеку Python Requests: GET-запросы

Чтобы увидеть ответ с ошибкой 404, измените URL-адрес на произвольные знаки. Можно без труда проверить код состояния, выполнив:

print(res.status_code)

Также можно проверить код состояния самостоятельно.

Изучаем библиотеку Python Requests: GET-запросы

Заголовки

Кроме этого ответ сервера включает заголовки. На них можно взглянуть, используя словарь HTTP-заголовков.

print(res.headers)
Изучаем библиотеку Python Requests: GET-запросы

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

Важно знать тип содержимого ответа сервера, так как оно указывает на формат отправляемых данных. К примеру, HTML, JSON, PDF, text и т. д. Но тип содержимого обычно обрабатывается библиотекой Requests. Это обеспечивает простой доступ к полученным данным.

Response Text

Свойство res.text может приобрести весь HTML-код, необходимый для создания домашней страницы Scotch. Если сохранить этот HTML как веб-страницу и открыть ее, то мы увидим нечто похожее на веб-сайт Scotch.

Чтобы загрузить картинки, скрипты и таблицы стилей совершается несколько запросов к одной веб-странице. Так что, если сохранить в файле только HTML-код, он не будет выглядеть так, как страница Scotch.io, открытая в браузере.

print(res.text)
Изучаем библиотеку Python Requests: GET-запросы

Используем Translate API

Мы будем использовать Yandex Translate API. После регистрации перейдите в Translate API и создайте ключ API. Получив ключ API, добавьте его в файл. Вот ссылка на веб-сайт, где это можно сделать: https://yandex.ru/dev/translate/

Изучаем библиотеку Python Requests: GET-запросы
API_KEY = 'your yandex api key'

Ключ API нужен, чтобы Яндекс мог аутентифицировать нас. Ключ API добавляется в конец URL-адреса запроса при отправке.

Чтобы узнать, какой URL-адрес нам необходимо отправить для использования API, обратимся к документации Яндекса:

https://yandex.ru/dev/translate/doc/dg/reference/translate-docpage/

Здесь доступна вся информация по использованию Translate API для перевода текста.

Изучаем библиотеку Python Requests: GET-запросы

Если в документации указан URL с амперсандами(&), вопросительными знаками(?) и знаками равенства(=), значит он предназначен для отправки GET- запросов

Настройки, размещенные в квадратных скобках([]), не будет обязательными. В данном случае format, options и callback являются необязательными. Но key, text и lang обязательны для запроса.

Добавим код для отправки на этот URL. Можно без труда заменить созданный нами запрос следующим образом:

url = 'https://translate.yandex.net/api/v1.5/tr.json/translate'res = requests.get(url)

Настройки можно без проблем добавить в конец URL-адреса. Но библиотека Requests может сделать это за нас. Причем второй вариант намного проще.

Для его реализации создадим словарь для настроек. Понадобятся только key, text и language. Создадим словарь, используя следующие значения: API key, «Hello» для текста и «en-es» для lang(для перевода с английского на испанский).

Передадим возможности dict() нужные ключи и значения:

params = dict(key=API_KEY, text='Hello', lang='en-es')

Сейчас передаем словарь настроек в возможность.get().

res = requests.get(url, params=params)

После этого библиотека Requests добавит настройки к URL-адресу. Сейчас используем оператор print для response text и посмотрим, что вернется в ответе.

print(res.text)
Изучаем библиотеку Python Requests: GET-запросы

Мы получили code(программный код состояния), совпадающий с кодом состояния ответа. А также language(язык), который мы указали, и перевод. Так что вы должны увидеть переведенный текст «Hola».

Попробуйте ещё раз со значением кода языка en-fr и получите «Bonjour».

params = dict(key=API_KEY, text='Hello', lang='en-fr')
Изучаем библиотеку Python Requests: GET-запросы

Посмотрим на заголовки этого ответа:

print(res.headers)
Изучаем библиотеку Python Requests: GET-запросы

Заголовки отличаются, так как мы обращаемся к иному серверу. Но в этом случае тип содержимого будет application/json вместо text/html. Это означает, что данные могут быть интерпретированы как JSON.

Когда application/json будет типом содержимого ответа, Requests может преобразовать ответ в словарь и список.

Чтобы данные были идентифицированы как JSON, используем способ.json() для объекта ответа. Если вывести результат его работы, то будет видно, что данные выглядят одинаково, но формат отличается.

json = res.json()print(json)
Изучаем библиотеку Python Requests: GET-запросы

Причина этого заключается в том, что сейчас это не обычный текст из res.text. Сейчас это печатная версия словаря.

Допустим, что необходимо приобрести доступ к тексту. Так как сейчас это словарь, мы можем использовать текстовый ключ.

print(json['text'])
Изучаем библиотеку Python Requests: GET-запросы

Сейчас мы видим только данные этого ключа. Чтобы приобрести этот текст, можно без труда использовать индекс.

print(json['text'][0])
Изучаем библиотеку Python Requests: GET-запросы

Сейчас единственное, что мы видим, это переведенное слово. Так что если настроить значения настроек, то получим различные результаты. Давайте изменим текст для перевода с Hello на Goodbye, целевой язык на испанский и отправим запрос снова.

params = dict(key=API_KEY, text='Goodbye', lang='en-es')
Изучаем библиотеку Python Requests: GET-запросы

Виды ошибок Translate API

Попробуйте настроить API KEY, удалив один символ. После этого ключ API не будет работать. Далее попробуйте отправить запрос.

Вот что будет в коде состояния:

print(res.status_code)
Изучаем библиотеку Python Requests: GET-запросы

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

Заключение

Конечно, можно без труда сделать намного больше. Но то, о чем я рассказал в данной статье, будет основой большинства запросов.

Чтобы приобрести больше информации, зайдите на https://apilist.fun/ и увидите несколько доступных API. Попробуйте использовать их совместно с Python Requests.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *