- Краткое руководство по библиотеке Python Requests
- Создание GET и POST запроса
- Передача параметров в URL
- Содержимое ответа (response)
- Бинарное содержимое ответа
- Содержимое ответа в JSON
- Необработанное содержимое ответа
- Метод post() модуля requests в Python
- Что такое HTTP-запрос в Python?
- Ключевые моменты POST-запроса
- Что такое модуль запросов Python?
- Как использовать модуль requests в Python?
- Что такое метод requests.post() в Python?
- Синтаксис
- Параметры
Краткое руководство по библиотеке Python Requests
Прежде чем начать, убедитесь, что установлена последняя версия Requests.
Для начала, давайте рассмотрим простые примеры.
Создание GET и POST запроса
Импортируйте модуль Requests:
Попробуем получить веб-страницу с помощью get-запроса. В этом примере давайте рассмотрим общий тайм-лайн GitHub:
r = requests.get('https://api.github.com/events')Мы получили объект Response с именем r . С помощью этого объекта можно получить всю необходимую информацию.
Простой API Requests означает, что все типы HTTP запросов очевидны. Ниже приведен пример того, как вы можете сделать POST запрос:
r = requests.post('https://httpbin.org/post', data = )Другие типы HTTP запросов, такие как : PUT, DELETE, HEAD и OPTIONS так же очень легко выполнить:
r = requests.put('https://httpbin.org/put', data = ) r = requests.delete('https://httpbin.org/delete') r = requests.head('https://httpbin.org/get') r = requests.options('https://httpbin.org/get')Передача параметров в URL
Часто вам может понадобится отправить какие-то данные в строке запроса URL. Если вы настраиваете URL вручную, эти данные будут представлены в нем в виде пар ключ/значение после знака вопроса. Например, httpbin.org/get?key=val . Requests позволяет передать эти аргументы в качестве словаря, используя аргумент params . Если вы хотите передать key1=value1 и key2=value2 ресурсу httpbin.org/get , вы должны использовать следующий код:
payload = r = requests.get('https://httpbin.org/get', params=payload) print(r.url)Как видно, URL был сформирован правильно:
https://httpbin.org/get?key2=value2&key1=value1
Ключ словаря, значение которого None , не будет добавлен в строке запроса URL.
Вы можете передать список параметров в качестве значения:
>>> payload = >>> r = requests.get('https://httpbin.org/get', params=payload) >>> print(r.url) https://httpbin.org/get?key1=value1&key2=value2&key2=value3Содержимое ответа (response)
Мы можем прочитать содержимое ответа сервера. Рассмотрим снова тайм-лайн GitHub:
>>> import requests >>> r = requests.get('https://api.github.com/events') >>> r.text '[Requests будет автоматически декодировать содержимое ответа сервера. Большинство кодировок unicode декодируются без проблем.
Когда вы делаете запрос, Requests делает предположение о кодировке, основанное на заголовках HTTP. Эта же кодировка текста, используется при обращение к r.text . Можно узнать, какую кодировку использует Requests, и изменить её с помощью r.encoding :>>> r.encoding 'utf-8' >>> r.encoding = 'ISO-8859-1'Если вы измените кодировку, Requests будет использовать новое значение r.encoding всякий раз, когда вы будете использовать r.text . Вы можете сделать это в любой ситуации, где нужна более специализированная логика работы с кодировкой содержимого ответа.
Например, в HTML и XML есть возможность задавать кодировку прямо в теле документа. В подобных ситуациях вы должны использовать r.content , чтобы найти кодировку, а затем установить r.encoding . Это позволит вам использовать r.text с правильной кодировкой.
Requests может также использовать пользовательские кодировки в случае, если в них есть потребность. Если вы создали свою собственную кодировку и зарегистрировали ее в модуле codecs, используйте имя кодека в качестве значения r.encoding .
Бинарное содержимое ответа
Вы можете также получить доступ к телу ответа в виде байтов для не текстовых ответов:
Передача со сжатием gzip и deflate автоматически декодируются для вас.
Например, чтобы создать изображение на основе бинарных данных, возвращаемых при ответе на запрос, используйте следующий код:
from PIL import Image from io import BytesIO i = Image.open(BytesIO(r.content))Содержимое ответа в JSON
Если вы работаете с данными в формате JSON, воспользуйтесь встроенным JSON декодером:
>>> import requests >>> r = requests.get('https://api.github.com/events') >>> r.json() [Если декодирование в JSON не удалось, r.json() вернет исключение. Например, если ответ с кодом 204 (No Content), или на случай если ответ содержит не валидный JSON, попытка обращения к r.json() будет возвращать ValueError: No JSON object could be decoded .
Следует отметить, что успешный вызов r.json() не указывает на успешный ответ сервера. Некоторые серверы могут возвращать объект JSON при неудачном ответе (например, сведения об ошибке HTTP 500). Такой JSON будет декодирован и возвращен. Для того, чтобы проверить успешен ли запрос, используйте r.raise_for_status() или проверьте какой r.status_code .
Необработанное содержимое ответа
В тех редких случаях, когда вы хотите получить доступ к “сырому” ответу сервера на уровне сокета, обратитесь к r.raw . Если вы хотите сделать это, убедитесь, что вы указали stream=True в вашем первом запросе. После этого вы уже можете проделать следующее:
Метод post() модуля requests в Python
Метод post() используется, когда мы хотим отправить какие-то данные на сервер. Затем данные сохраняются в базе данных.
Что такое HTTP-запрос в Python?
POST отправляет данные на сервер для создания ресурса. Данные, отправленные на сервер с запросом POST, хранятся в теле запроса HTTP.
Ключевые моменты POST-запроса
- Запросы POST не имеют ограничений по длине данных. Это может быть все, что вы хотите.
- POST-запросы не сохраняются в истории браузера.
- Никогда не кэшируются.
- Не могут быть добавлены в закладки.
Что такое модуль запросов Python?
Requests — это HTTP-библиотека под лицензией Apache2, написанная на Python, которая помогает сделать HTTP-запросы более простыми и удобными для человека.
Как использовать модуль requests в Python?
Вам необходимо установить модуль запросов в вашей системе, чтобы использовать его в Python. Чтобы установить модуль requests, выполните следующую команду.
Чтобы использовать Pipenv для управления пакетами Python, вы можете запустить следующую команду.
После установки библиотеки запросов вы можете использовать ее в своем приложении. Например, импорт запросов выглядит следующим образом.
Что такое метод requests.post() в Python?
Чтобы создать запрос POST в Python, используйте метод request.post(). Метод запросов post() принимает URL-адреса, данные, json и аргументы в качестве аргументов и отправляет запрос POST на указанный URL-адрес.
Вы можете отправить данные вместе с post-запросом.
Синтаксис
Параметры
Параметр | Описание |
---|---|
url | обязателен, URL-адрес запроса. |
data | необязателен. Это может быть словарь, список кортежей, байты или файловый объект для отправки по указанному url. |
json | необязательно. Это объект JSON для отправки по указанному URL. |
files | необязательно. Это словарь файлов для отправки по указанному url. |
allow_redirects | необязательно. Это логическое значение для включения/отключения перенаправления. Значение по умолчанию True (разрешает перенаправление) |
auth | необязательно. Это кортеж для включения безопасной аутентификации по протоколу HTTP. По умолчанию None |
cert | необязательно. Это строка или кортеж, указывающий файл сертификата или ключ. По умолчанию None |
cookies | необязательно. Это словарь файлов cookie для отправки по указанному url-адресу. По умолчанию None |
headers | необязательно. Это словарь HTTP-заголовков для отправки по указанному URL. По умолчанию None |
proxies | необязательно. Это словарь протокола для URL-адреса прокси-сервера. По умолчанию None |
stream | необязательно. Логическое значение показывает, должен ли ответ быть немедленно загружен (False) или передан потоком (True). Значение по умолчанию False |
timeout | необязательно. Это кортеж, или число, указывающее, сколько секунд требуется для ожидания, пока клиент установит соединение и отправит ответ. Аргумент по умолчанию равен None, что означает, что запрос будет продолжаться до тех пор, пока соединение не будет закрыто или потеряно. |
verify | необязательно. Это логическое значение или строковое указание для проверки наличия TLS-сертификата сервера или нет. Значение по умолчанию True |