- Библиотека Requests: эффективные и простые HTTP-запросы в Python
- 1. Основные возможности библиотеки Requests
- Документация по библиотеке Python Requests¶
- Любимые функции¶
- Руководство пользователя¶
- Руководство от сообщества¶
- Документация/руководство по API¶
- Руководство для авторов¶
- Краткое руководство по библиотеке Python Requests
- Создание GET и POST запроса
- Передача параметров в URL
- Содержимое ответа (response)
- Бинарное содержимое ответа
- Содержимое ответа в JSON
- Необработанное содержимое ответа
Библиотека Requests:
эффективные и простые
HTTP-запросы в Python
Модуль Requests предоставляет возможность управления HTTP-запросами при помощи языка Python. Инструментарий библиотеки широкий и рассчитан на все случаи взаимодействия с web-приложениями. Код, написанный с применением Requests , не является громоздким, легко читается, а функции и методы наглядно настраиваются под специфические нужды.
Несмотря на то, что в Python встроен модуль urllib3 , обладающий сходным функционалом, практически все применяют Requests , что свидетельствует о его удобстве и простоте.
1. Основные возможности библиотеки Requests
Модуль разработан с учетом потребностей современных web-разработчиков и актуальных технологий. Многие операции автоматизированы, а ручные настройки сведены к минимуму.
Для понимания инструментария библиотеки перечислим ее основные возможности:
– поддержка постоянного HTTP-соединения и его повторное использование;
– применение международных и национальных доменов;
– использование Cookie : передача и получение значений в формате ключ: значение ;
– автоматическое декодирование контента;
– SSL верификация;
– аутентификация пользователей на большинстве ресурсов с сохранением;
– поддержка proxy при необходимости;
– загрузка и выгрузка файлов;
– стриминговые загрузки и фрагментированные запросы;
– задержки соединений;
– передача требуемых заголовков на web-ресурсы и др.
В целом, практически любая задача, которая возникает у разработчика, нашла свое отражение в коде библиотеки. Важно понимать, что Requests не предназначен для парсинга ответа сервера (для этого применяют другие модули, например, Beautiful Soup ).
Документация по библиотеке Python Requests¶
Requests — это элегантная и простая HTTP-библиотека для Python, созданная для людей.
Узрите силу Requests:
>>> r = requests.get(‘https://digitology.tech/’, auth=(‘user’, ‘pass’)) >>> r.status_code 200 >>> r.headers[‘content-type’] ‘application/json; charset=utf8’ >>> r.encoding ‘utf-8’ >>> r.text ‘ >>> r.json()
Аналогичный код, без Requests:
import urllib2 gh_url = 'https://digitology.tech/' req = urllib2.Request(gh_url) password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm() password_manager.add_password(None, gh_url, 'user', 'pass') auth_manager = urllib2.HTTPBasicAuthHandler(password_manager) opener = urllib2.build_opener(auth_manager) urllib2.install_opener(opener) handler = urllib2.urlopen(req) print(handler.getcode()) print(handler.headers.getheader('content-type')) # ------ # 200 # 'application/json'
Requests позволяет очень легко отправлять HTTP/1.1 запросы. Нет необходимости вручную добавлять строки запроса к вашим URL-адресам или кодировать POST данные. Сохранение активности (Keep-Alive) и пулы HTTP-соединений на 100% автоматические, благодаря urllib3.
Любимые функции¶
Requests готов к работе уже сейчас.
- Keep-Alive и пул подключений
- Международные домены и URL-адреса
- Сеансы с сохранением cookie файлов
- Проверка SSL в стиле браузера
- Автоматическое декодирование контента
- Базовая/дайджест-аутентификация
- Элегантные cookie с ключом/значением
- Автоматическая декомпрессия
- Автоматическая декодирование тела ответа
- Поддержка HTTP(S) прокси
- Многостраничная загрузка файлов
- Потоковое скачивание
- Таймауты подключения
- Разбивка на части запоросов
- Поддержка .netrc
Requests официально поддерживает Python 2.7 и 3.6+ и отлично работает на PyPy.
Руководство пользователя¶
Эта часть документации, в основном прозаическая, начинается с некоторой справочной информации о Requests, а затем посвящена пошаговым инструкциям по максимально эффективному использованию Requests.
- Установка Requests
- $ python -m pip install requests
- Получить исходный код
- Выполнить запрос
- Передача параметров в URL-адресах
- Содержание ответа
- Контент двоичного ответа
- Содержимое JSON ответа
- Необработанный контент ответа
- Пользовательские заголовки
- Более сложный POST запросы
- POST файл с многократным кодированием
- Коды состояния ответа
- Заголовки ответов
- Cookie
- Перенаправление и история
- Таймауты
- Ошибки и исключения
- Объекты Session
- Объекты запроса и ответа
- Подготовка Requests
- Подтверждение сертификата SSL
- Сертификаты на стороне клиента
- Сертификаты CA
- Рабочий процесс с содержимым body
- Keep-Alive
- Потоковая загрузка
- Фрагментированное кодирование Requests
- POST несколько файлов с многократным кодированием
- Хуки событий
- Пользовательская аутентификация
- Стриминг Requests
- Прокси
- Согласие
- HTTP-глаголы
- Пользовательские глаголы
- Заголовки ссылок
- Транспортные адаптеры
- Блокирующий или неблокирующий?
- Порядок заголовков
- Таймауты
- Базовая аутентификация
- Дайджест-аутентификация
- OAuth 1 Аутентификация
- OAuth 2 и аутентификация OpenID Connect
- Другая проверка подлинности
- Новые формы аутентификации
Руководство от сообщества¶
Эта часть документации, в основном прозаическая, подробно описывает экосистему и сообщество Requests.
- Рекомендуемые пакеты и расширения
- Пакет Certifi
- CacheControl
- Requests-Toolbelt
- Requests-Threads
- Requests-OAuthlib
- Бетамакс
- Поддерживается ли декодирование данных?
- Можно ли установить свой User-Agent?
- Почему не Httplib2?
- Поддерживается ли Python 3?
- Поддержка Python 2?
- Что за ошибка «hostname doesn’t match (имя хоста не совпадает)»?
- Python для iOS
- Stack Overflow
- Зарегистрируйте проблему
- Процесс
- Предыдущие CVE
- Основные релизы
- Незначительные релизы
- Релизы исправлений
- Рассуждение
Документация/руководство по API¶
Если вы ищете информацию о конкретной функции, классе или методе, эта часть документации для вас.
- Интерфейс разработчика
- Основной интерфейс
- Исключения
- Сеансы Requests
- Классы нижнего уровня
- Классы низшего-нижнего Уровня
- Аутентификация
- Кодировки
- Cookies
- Поиск кода состояния
- Переход на 1.x
- Переход на 2.x
Руководство для авторов¶
Если вы хотите внести свой вклад в проект, эта часть документации для вас.
- Руководство для авторов
- Будьте доброжелательны
- Получить раннюю обратную связь
- Пригодность вклада
- Вклад в код
- Шаги по отправке кода
- Проверка кода
- Новые участники
- Кодовый стиль Кеннета Рейца™
- Хранители кристаллов
- Предыдущие Хранители кристаллов
- Патчи и предложения
Руководство завершено. Удачи.
Нашли ошибку? Выделите текст и нажмите Shift+Enter.
© Авторские права Digitology.tech
Последнее обновление: апр. 22, 2023Краткое руководство по библиотеке 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 в вашем первом запросе. После этого вы уже можете проделать следующее: