- Получение и отправка данных в формате JSON с помощью модуля Requests в Python.
- Response.json и аргумент json для метода Requests.post() модуля Requests.
- Получить содержимое в формате JSON.
- Передача данных в формате JSON.
- Выполнение запросов API с помощью Python
- Различные методы HTTP и коды ответов
- Английский для программистов
- Конечные точки API
- Как сделать запрос GET
- Как создать запрос POST
- Как создать запрос PUT
- Как создать запрос PATCH
- Создание запроса DELETE
- Заключение
- Запросы Python
- Тема Введение
- Создайте запрос на получение и отправьте
- Передача параметров в URL
- Содержание ответа response
- Двоичное содержимое ответа
- Содержимое ответа в формате json
- Необработанное содержимое ответа
- Пользовательские имена
- Более сложные почтовые запросы
- Отправить файл, состоящий из нескольких частей, позже
- Коды статуса ответа
- Заголовки ответов
Получение и отправка данных в формате JSON с помощью модуля Requests в Python.
Response.json и аргумент json для метода Requests.post() модуля Requests.
Получить содержимое в формате JSON.
Модуль запроса имеет встроенный декодер JSON на случай, если ответ придет в виде данных JSON:
Если декодирование JSON не удается, метод resp.json() выдает исключение. Например, если ответ возвращает 204 (нет содержимого) или если ответ содержит недопустимый формат JSON, попытка вызвать метод resp.json() вызовет исключение simplejson.JSONDecodeError, если установлено значение simplejson, или ValueError .
Обратите внимание, что успешный вызов метода resp.json() не означает успешный ответ. Некоторые серверы могут возвращать объект JSON (например, сведения об ошибке HTTP 500) в ошибочном ответе. Данный JSON будет декодирован и возвращен. Чтобы проверить успешность запроса, используйте resp.raise_for_status() или проверьте resp.status_code .
Передача данных в формате JSON.
Модуль запроса может отправлять данные в формате JSON. Если в аргумент data метода request.post() передается строка вместо dict, данные будут отправлены напрямую.
Например, GitHub API v3 принимает данные в формате JSON через POST / Методы PATCH:
Вместо того, чтобы кодировать сам словарь, вы также можете передать его напрямую, используя аргумент json метода request.post() (добавлен в версии 2.4.2), и данные будут автоматически преобразованы в JSON. :
Обратите внимание, что аргумент json будет проигнорирован, если аргумент данных или файл используется одновременно.
Источник
Выполнение запросов API с помощью Python
Интерфейс прикладного программирования (API) — это сервер, который позволяет загружать и отправить данные с помощью кода. В основном мы используем API для извлечения данных. Это тема, на которой будет сосредоточено наше руководство для начинающих. Итак, приступим!
Когда мы хотим получить данные от API, нам нужно сделать запрос. Приложения используются во всем Интернете. Например, когда вы посетили этот веб-сайт, ваш браузер отправил запрос на веб-сервер Pythonist, который ответил и предоставил вам содержимое этого веб-сайта.
Запросы API работают так же. Он запрашивает данные с сервера API и отвечает на его запрос. Сервер может вернуть вам некоторые данные или код, которые затем будут интерпретированы вашим компьютером.
Например, когда HTML-код страницы возвращается, он преобразуется для пользователя в страницу с различными надписи, изображения и т. д., а не просто код. Конечно, всегда что-то может пойти не так, но в остальном все должно работать так.
Различные методы HTTP и коды ответов
Существуют разные методы HTTP для REST API. Они сообщают API, какие операции выполнять с данными. Хотя существует довольно много HTTP-методов, следующие пять наиболее часто используются с REST API:
HTTP-метод | Описание |
---|---|
GET | Получить существующие данные |
POST | Добавить новые данные |
ПОСТАВИТЬ | Обновить существующие данные |
ИСПРАВИТЬ | Частично обновить существующие данные |
УДАЛИТЬ | Удалить данные |
Как только REST API получает и обрабатывает HTTP-запрос, он возвращает ответ с кодом состояния HTTP. Этот код состояния предоставляет информацию об ответе и помогает клиентскому приложению узнать, что это за ответ.
Коды ответов или коды состояния нумеруются по категориям результатов:
Код | Категория результата |
---|---|
1хх | Информативный ответ |
2xx | Успех |
3xx | Перенаправление |
4xx | Ошибка на стороне клиента |
5xx | Ошибка на стороне сервера |
Подробнее о кодах состояния см. Веб-документация HTTP v MDN.
Английский для программистов
Наш канал Telegram с тестами английского для программистов. Английский является частью карьеры программиста. Поэтому полезно обсудить это сейчас
Конечные точки API
Конечные точки API – это предоставленные сервером общедоступные URL-адреса, которые клиентское приложение использует для доступа к различным ресурсам и данным.
В этом руководстве мы будем использовать Fake Store REST API. В частности, мы будем использовать следующие конечные точки:
Метод HTTP | Конечная точка API | Описание |
---|---|---|
GET | /products | Получить список продуктов |
GET | /products ?limit=x | Получить только x товаров (например, только 5 товаров) |
GET | /products/ |
Каждая из вышеперечисленных конечных точек выполняет разные действия в соответствии с методом HTTP. Для каждого URL-адреса API базовый URL-адрес: https://fakestoreapi.com. Мы рассмотрим требования одно за другим.
Чтобы использовать эти API, мы должны сначала установить внешнюю библиотеку. Большинство разработчиков Python используют библиотеку запросов для взаимодействия с веб-сервисами. Вы можете установить эту библиотеку с помощью команды pip следующим образом:
$ pip install prompts
После установки библиотеки все готово и готово к работе!
Как сделать запрос GET
Это один из самых распространенных HTTP-запросы, с которыми вы можете столкнуться. Это операция только для чтения, позволяющая получать данные из API.
Давайте попробуем использовать запрос GET для первой конечной точки выше. Он должен вернуть список продуктов.
В приведенном выше сценарии используется метод request.get() для отправки запроса GET в конечную точку API /products. Этот запрос возвращает список всех продуктов. Затем мы вызываем метод .json(), чтобы увидеть полученный ответ JSON. Выглядит это так:
Если присмотреться, ответ JSON выглядит как список словарей Python. JSON — это очень популярный формат обмена данными для REST API.
Вы также можете получить другие атрибуты, связанные с ответом, например код состояния. Это будет выглядеть так:
Как вы знаете, код состояния 200 означает, что мы получили ответ об успешном завершении и все работает нормально.
Поскольку конечная точка /products возвращает много данных, давайте ограничим эти данные только тремя продуктами.
Для этого у нас есть конечная точка /products?limit = x, где x — положительное целое число. limit (лимит, лимит) — параметр запроса. Давайте посмотрим, как мы можем добавить этот параметр в наш запрос:
Метод request.get() принимает параметр с именем params, в котором мы можем указать параметры нашего запроса в формате словаря Python. Поэтому мы создаем словарь с именем query_params и передаем limit в качестве ключа и 3 в качестве значения. Поэтому мы передаем этот словарь query_params в request.get() . Теперь наш код выглядит так:
Итак, у нас есть данные ответов, ограниченные только тремя продуктами. давайте попробуем получить только один продукт, идентификатор которого равен 18.
Поскольку у нас есть конечная точка /products/
, мы можем передать идентификатор 18 в URL-адресе API и сделать для него запрос GET. Ответ будет выглядеть следующим образом:
Как создать запрос POST
Мы используем запрос POST для добавления новых данных в REST API. Данные отправляются на сервер в формате JSON, который выглядит как словарь Python. Согласно документации Fake Store API, у товара есть следующие атрибуты: название (name), цена (price), описание (description), изображение (image) и категория (category). Таким образом, наша новинка выглядит следующим образом:
Мы можем отправить запрос POST, используя метод Requests.post() следующим образом:
В методе request.post() мы можем передать данные JSON, используя JSON-аргумент. Использование аргумента json автоматически установит Content-Type в Application/JSON в заголовке запроса.
Когда мы отправляем POST-запрос к конечной точке /products, мы получаем объект продукта с идентификатором . Этот ответ выглядит следующим образом:
Если мы не используем аргумент json, мы должны сделать запрос POST следующим образом:
В этом случае, когда мы используем аргумент данных вместо json , мы должны явно указать тип содержимого application/json. Когда мы используем аргумент json, нам не нужно сериализовать данные, но в этом случае это необходимо и делается с помощью json.dumps() .
Как создать запрос PUT
Нам часто нужно обновлять существующие данные в API. Мы можем полностью обновить данные с помощью запроса PUT. Это означает, что когда мы делаем запрос PUT, он заменяет все старые данные. новые.
В запросе POST мы создаем новый продукт с id 21. Обновим старый продукт, отправив новый запрос PUT на конечные продукты/
. Давайте напишем следующий код:
Когда мы делаем запрос PUT с updated_product с помощью метода request.put(), он возвращает следующие данные JSON:
Обратите внимание, что продукт Старые данные был полностью заменен обновленным продуктом.
Как создать запрос PATCH
Иногда нам не нужно полностью заменять старые данные. Скорее, мы хотим изменить только определенные поля. В этом случае мы используем запрос PATCH.
.
. Давайте обновим категорию продуктов с одежды на электронику, отправив запрос PATCH на конечную точку products/
. Наш код будет выглядеть следующим образом:
В этом случае мы будем использовать метод request.patch(), который вернет следующий ответ:
Обратите внимание, что на этот раз все данные не изменилось, обновлено только поле категории.
Создание запроса DELETE
Как следует из названия, если вы хотите удалить ресурс из API, вы можете использовать запрос DELETE. Удалить продукт с идентификатором, равным 21:
Метод request.delete() помогает нам сделать запрос DELETE к конечной точке /products/
Заключение
В В этом учебник, который мы видели, как взаимодействовать с веб-сервисами с помощью Python. Мы рассмотрели пять различных запросов: GET, POST, PUT, PATCH и DELETE. Кроме того, мы обсудим их синтаксис и то, как они работают, на примерах. Мы также обсудим, что такое коды ответа или коды состояния и что они означают.
Надеемся, вы найдете это Руководство понравилось. Спасибо за чтение! Удачного кодирования!
Источник
Запросы Python
Тема Введение
Модуль запросов Python — это стандарт, принятый для обработки HTTP-запросов.
Этот модуль избавляет вас от необходимости работать с низкоуровневыми деталями. Обработка запросов становится простой и элегантной.
В этом руководстве рассматриваются наиболее полезные функции библиотеки запросов и различные способы их использования.
Прежде чем использовать модуль, его необходимо установить:
Создайте запрос на получение и отправьте
Сначала вам нужно добавить модуль Запросы в свой код:
Давайте создадим запрос и получим ответ, содержащий страницу и все необходимое данные об этом.
Ответ на запрос входит в переменную ответа. Благодаря этому объекту можно использовать любую информацию, связанную с этим ответом.
Создание POST-запроса так же просто:
Другие типы HTTP-запросов, например: PUT, DELETE и другие. , Это не так сложно:
Передача параметров в URL
Иногда может потребоваться отправить различные данные вместе с URL-запросом. При настройке URL-адреса вручную параметры отображаются в виде пар ключ=значение после «?» Например, https://www.google.ru/search?q=Python. Модуль Requests предоставляет возможность передавать эти параметры в виде словаря с помощью аргумента params. Если вы хотите передать q = Python и foo=’bar’ на google.ru/search, вам следует использовать следующий код:
Здесь мы видим, что URL был создан именно так, как задумано.
Пара ключ=значение, где значение Ничего не будет добавлено к параметрам URL-адреса запроса.
В запрос также можно передать список параметров:
Содержание ответа response
Код в листинге выше создает объект Response, который содержит ответ сервера на наше требование. Вы можете увидеть адрес, на который был отправлен запрос, обратившись к его атрибуту .url. Атрибут .text позволяет отображать содержимое ответа. Это работает следующим образом:
Библиотека пытается автоматически определить кодировку ответа на основе его заголовков. Вы можете узнать, какую кодировку выбрал модуль, следующим образом:
Вы также можете установить кодировку самостоятельно, используя атрибут .encoding.
Двоичное содержимое ответа
Это можно увидеть ответ в виде байтов:
При передаче со сжатием ответ автоматически декодируется.
Содержимое ответа в формате json
То же, что и у встроенных запросов обработка из ответов JSON:
импортировать запросы
импортировать json
response = requirements.get(‘http://api.open-notify.org/astros.json’)
print(json.dumps(response.json(), sort_keys= True, indent=4))
#Output:
«name»: «Марк Ванде Хей»
» имя «: «Олег Новицкий»
Если ответ не в формате JSON, .json выдаст исключение:
Необработанное содержимое ответа
Если вам нужно получить доступ к не- обработанный ответ от сервера на уровне сокета, см. атрибут .raw. Для этого в запросе необходимо указать параметр stream=True. Этот параметр заставляет модуль считывать данные по мере их поступления.
Вы также можете использовать метод .iter_content. Этот метод перебирает данные ответа потока и предотвращает чтение всего содержимого сразу в память для больших ответов. Параметр chunk_size — это количество байтов для загрузки в память. Параметр chunk_size может быть изменен произвольно.
response.iter_content автоматически декодирует сжатый ответ. Response.raw представляет собой массив необработанных байтов, содержимое ответа не изменяется.
Пользовательские имена
Если вам нужно установить заголовки в HTTP-запросе, передайте словарь с ними в параметр заголовков. Значения заголовка должны быть типа string, bytestring или unicode. Имена заголовков не чувствительны к регистру.
В следующем примере мы задаем информацию об используемом браузере:
Более сложные почтовые запросы
Существует способ отправки данных, как если бы они были результатом заполнения Форма в Интернете:
Параметр данных может иметь любое количество значений для каждого ключа. Для этого вы должны предоставить данные в формате кортежа или в виде словаря со списками значений.
Если вам нужно отправить данные, которые не закодированы как данные формы, передайте по запросу строку вместо словаря. . После этого данные будут отправлены в исходном виде.
Отправить файл, состоящий из нескольких частей, позже
Требования упрощают загрузку закодированных файлов, состоящих из нескольких частей:
Вы можете явно указать имя файла, тип содержимого и заголовок:
Вы можете отправлять строки, которые будут получены в виде файлов:
Коды статуса ответа
Возможно, самая важная часть информации (безусловно, первое), которое вы можете получить с помощью библиотеки запросов, — это код состояния ответов.
Таким образом, статус 200 означает, что запрос был выполнен успешно, а статус 404 означает, что ресурс не найден.
Самое главное, с какой цифры начинается код состояния with:
- 1XX — информация
- 2XX — успех
- 3XX — перенаправление
- 4XX — ошибка клиента (ошибка на нашей стороне )
- 5XX — ошибка сервера (наихудшие коды разработчиков)
Вы можете использовать атрибут .status_code для получения статуса, возвращаемого с сервера:
.status_code вернул 200, что означает, что запрос выполнен успешно, и сервер вернул запрошенные данные.
При необходимости эту информацию можно использовать в вашем скрипте Python для принятия решений:
Если ответ код состояния 200, команды скрипта будут печатать «Успех!», но если это 404 скрипт вернет «Страница куда-то исчезла…».
Если вы используете модуль Response в условном выражении и проверьте логическое значение его экземпляра (если это ответ), он будет оцениваться как True, если код ответа находится между 200 и 400, и False в во всех остальных случаях.
Давайте упростим код из предыдущего примера:
Этот метод не проверяет, что код состояния точно равен 200
Это связано с тем, что ответы с кодом в диапазоне 200–400, например 204 и 304, также успешны, поскольку возвращают обработанный ответ. Так что этот подход делит все запросы на успешные и неудачные, не более того. Во многих случаях вам потребуется более подробная обработка кодов состояния запросов.
Если request.get не удался, вы можете создать исключение. Такую конструкцию можно создать, вызвав .raise_for_status() с помощью конструкции try-except:
Заголовки ответов
Мы можем увидеть заголовки ответов с сервера:
Источник