- HTTP-библиотека requests в Python.
- Простая в использовании HTTP-библиотека для Python.
- Установка модуля requests в виртуальное окружение:
- Содержание:
- Создание HTTP запроса к WEB-странице.
- Код ответа сервера ( status code ).
- Получение контента WEB-страницы в виде текста.
- Получение контента в виде байтов.
- Отслеживание перенаправлений, атрибут Response.history .
- Использование библиотеки Requests в Python
- Как установить Requests
- Импортирование модуля Requests
- Делаем запрос
- Работаем с кодом ответа
- Получаем содержимое страницы
- Работаем с заголовками
- Кодирование
- Пользовательские заголовки
- Переадресация и история
- Осуществление POST-запроса HTTP
- Ошибки и исключения
- Дополнительные материалы
- requests 2.25.1
- Navigation
- Project links
- Statistics
- Maintainers
- Classifiers
- Project description
- Requests
- Installing Requests and Supported Versions
- Supported Features & Best–Practices
- Python: модуль requests
- Создание запроса
- Передача аргументов в запросе
- Содержимое объекта response
- Необработанное содержимое объекта response
- Изменение заголовков
- Более сложные запросы POST
- POST для файлов составной кодировки
- Коды состояний в requests
- Заголовки в requests
- Таймауты
- Ошибки и исключения
HTTP-библиотека requests в Python.
Простая в использовании HTTP-библиотека для Python.
Модуль requests — это элегантная и простая HTTP-библиотека для Python, созданная для людей. Модуль позволяет чрезвычайно легко отправлять HTTP/1.1 запросы. Нет необходимости вручную составлять URL-адреса или кодировать данные для PUT и POST запросов (в настоящее время можно использовать метод Request.json )
Установка модуля requests в виртуальное окружение:
Содержание:
Создание HTTP запроса к WEB-странице.
Сделать HTTP-запрос очень просто. Сначала необходимо импортировать модуль requests . Далее попробуем запросить контент веб-страницы. Для примера запросим методом GET общедоступную HTTP страницу с временной шкалой сайта GitHub:
В результате запроса получили объект ответа под названием resp . Далее, из этого объекта можно получить всю необходимую информацию о этой странице.
Простой API запросов означает, что все формы HTTP-запросов столь же очевидны. Например, вот как вы делаете запрос HTTP POST:
Создание других типов HTTP-запросов, таких как PUT, DELETE, HEAD и OPTIONS все это так же просто и очевидно.
При работе с библиотекой requests необходимо уяснить следующее:
Всякий раз, когда вызываются методы requests.get() или requests.post() и т. д., то делаются две важные вещи.
- Создается объект Request , который будет отправлен на сервер для запроса ресурса указанного в URL .
- Создается объект Response , который генерируется после того, как запрос получает ответ от сервера.
Объект Response содержит всю информацию, возвращаемую сервером, а также объект запроса, который вы создали изначально
Код ответа сервера ( status code ).
Можно проверить код состояния ответа сервера следующим способом:
Модуль requests также поставляется со встроенным объектом поиска кода состояния requests.codes для удобства использования:
Если сделан плохой запрос (ошибка клиента 4XX или ответ на ошибку сервера 5XX), то можно поднять его с помощью объекта ответа Response.raise_for_status() :
Но если вызвать Response.raise_for_status() для ответа сервера со статусом 200, то в результате получим None :
Получение контента WEB-страницы в виде текста.
Извлекать/читать контента/текста ответа сервера также легко как делать запросы. Еще раз рассмотрим временную шкалу GitHub:
Запросы будут автоматически декодировать содержимое с сервера. Большинство кодировок юникода легко декодируются.
Когда посылается запрос, модуль requests делает обоснованные предположения о кодировке ответа на основе HTTP-заголовков. При доступе к атрибуту resp.text используется кодировка, прочитанная модулем requests во время запроса к серверу. Если сервер не предоставляет кодировку страницы в заголовках ответа или кодировка не распознана, то по умолчанию requests использует кодировку ‘utf-8’. Можно узнать, какую кодировку использует конкретный запрос, и изменить ее, используя атрибут resp.encoding :
Если изменить кодировку, то запросы будут использовать новое значение resp.encoding всякий раз, когда вызывается resp.text . Бывают случаи, когда заголовок ответа сервера выдает неправильную кодировку (отличную от той которая указана в HTML разметке) и в этой ситуации, необходимо применить специальную логику, чтобы определить, какой будет кодировка контента. Например, языки разметки HTML и XML имеют возможность указывать свою кодировку в своем теле. В подобных ситуациях необходимо использовать resp.content , чтобы найти указанную кодировку, а затем установить resp.encoding . Это позволит извлекать данные HTML-страницы resp.text с правильной кодировкой.
Получение контента в виде байтов.
Можно получить доступ к телу ответа в байтах для нетекстовых запросов, например для загрузки изображений:
Кодировки gzip и передача-кодировки deflate автоматически декодируются.
Например, чтобы воссоздать изображение из двоичных данных, возвращаемых запросом, можно использовать следующий код:
Отслеживание перенаправлений, атрибут Response.history .
По умолчанию модуль requests будет обрабатывать перенаправление для всех типов запросов, кроме HEAD (по умолчанию отключено). Для отслеживания всех перенаправления можно использовать атрибут .history объекта Response .
Список Response.history содержит объекты Response , созданные для выполнения запроса. Список отсортирован от самого старого до самого последнего ответа.
Например, GitHub перенаправляет все HTTP-запросы на HTTPS:
Если используется запросы GET, OPTIONS, POST, PUT, PATCH или DELETE, то можно отключить обработку перенаправления с помощью аргумента allow_redirects :
Если используется HEAD запрос, то также можно включить отслеживание перенаправления:
Использование библиотеки Requests в Python
Для начала давайте разберемся, что же вообще такое библиотека Requests.
Requests — это HTTP-библиотека, написанная на Python (под лицензией Apache2). Она спроектирована для взаимодействия людей с эим языком. Это означает, что вам не нужно вручную добавлять строки запроса в URL-адреса или заносить данные в форму для POST -запроса. Если это кажется вам бессмысленным, не волнуйтесь. В нужное время все прояснится.
Что же делает библиотека Requests?
Библиотека Requests дает вам возможность посылать HTTP/1.1-запросы, используя Python. С ее помощью вы можете добавлять контент, например заголовки, формы, многокомпонентные файлы и параметры, используя только простые библиотеки Python. Также вы можете получать доступ к таким данным.
В программировании библиотека — это набор или, точнее сказать, предварительно настроенный набор подпрограмм, функций и операций, которые в дальнейшем может использовать ваша программа. Эти элементы часто называют модулями, которые хранятся в объектном формате.
Библиотеки очень важны, потому что вы можете загрузить модуль и использовать все, что он предлагает, без явной связи с вашей программой. Они действительно автономны, так что вы можете создавать свои собственные программы с ними, и все же они остаются отделенными от ваших программ.
Таким образом, о модулях можно думать как о неких шаблонах кода.
Повторимся еще раз, Requests — это библиотека языка Python.
Как установить Requests
Сразу сообщим вам хорошую новость: существует множество способов для установки Requests. С полным списком можно ознакомиться в официальной документации библиотеки Requests.
Вы можете использовать pip, easy_install или tarball.
Если вам нужен исходный код, вы можете найти его на GitHub.
Мы для установки библиотеки воспользуемся менеджером pip.
В интерпретаторе Python введите следующую команду:
Импортирование модуля Requests
Для работы с библиотекой Requests в Python вам необходимо импортировать соответствующий модуль. Вы можете это сделать, просто поместив следующий код в начало вашей программы:
Разумеется, предварительно этот модуль должен быть установлен и доступен для интерпретатора.
Делаем запрос
Когда вы пингуете веб-сайт или портал для получения информации, то это как раз и называется созданием запроса.
Для получения веб-страницы вам нужно написать что-то в таком духе:
Работаем с кодом ответа
Перед тем как вы будете что-то делать с веб-сайтом или URL, хорошей идеей будет проверить код ответа, который вернул вам сервер. Это можно сделать следующим образом:
Получаем содержимое страницы
После того как сервер вам ответил, вы можете получить нужный вам контент. Это также делается при помощи функции get библиотеки Requests.
Работаем с заголовками
Используя словари Python, вы можете просмотреть заголовки ответа сервера. Особенностью работы библиотеки Requests является то, что для получения доступа к заголовкам вы можете использовать в ключах словаря как заглавные, так и строчные буквы.
Если вызываемого заголовка нет, будет возвращено значение None .
Кодирование
Библиотека Requests автоматически декодирует любой контент, извлеченный из сервера. Хотя большинство наборов символов Unicode в любом случае легко декодируются.
Когда вы делаете запрос к серверу, библиотека Requests делает обоснованное предположение о кодировке ответа. Это делается на основании заголовков HTTP. Предполагаемая кодировка будет использоваться при доступе к файлу r.text .
С помощью этого файла вы можете определить, какую кодировку использует библиотека Requests, и при необходимости изменить ее. Это возможно благодаря атрибуту r.encoding , который вы найдете в файле.
Когда вы измените значение кодировки, в дальнейшем библиотека Requests при вызове вами r.text будет использовать новый тип кодировки.
Пользовательские заголовки
Если вы хотите добавить пользовательские заголовки в HTTP-запрос, вы должны передать их через словарь в параметр заголовков.
Переадресация и история
Библиотека Requests автоматически поддерживает переадресацию при выполнении команд GET и OPTION .
Например, GitHub из соображений безопасности автотоматически переадресует все HTTP -запросы на HTTPS .
Вы можете отслеживать статус переадресации при помощи метода history , который реализован для объекта response .
Осуществление POST-запроса HTTP
Также с помощью библиотеки Requests вы можете работать и с POST -запросами:
Но вы также можете выполнять и другие HTTP -запросы, такие как PUT , DELETE , HEAD , и OPTIONS .
При помощи этих методов можно сделать массу разных вещей. Например, при помощи следующего кода вы можете создать репозиторий GitHub:
Ошибки и исключения
Есть ряд ошибок и исколючений, с которыми вам надо ознакомиться при использовании библиотеки Requests.
- При проблемах с сетью, например с DNS , или отказе соединения, библиотека Requests вызовет исключение ConnectionError .
- При недопустимом ответе HTTP библиотека Requests вызвоет исключение HTTPError , но это довольно редкий случай.
- Если время запроса истекло, возникнет исключение Timeout .
- Когда при запросе будет превышено заранее заданное количество переадресаций, возникнет исключение TooManyRedirects .
Все исключения, вызываемые библиотекой Requests, наследуются от объекта requests.exceptions.RequestException .
Дополнительные материалы
Более подробно про билиотеку Requests вы можете почитать, пройдя по следующим ссылкам:
requests 2.25.1
pip install requests Copy PIP instructions
Released: Dec 16, 2020
Python HTTP for Humans.
Navigation
Project links
Statistics
View statistics for this project via Libraries.io, or by using our public dataset on Google BigQuery
License: Apache Software License (Apache 2.0)
Requires: Python >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*
Maintainers
Classifiers
- Development Status
- 5 — Production/Stable
- Intended Audience
- Developers
- License
- OSI Approved :: Apache Software License
- Natural Language
- English
- Programming Language
- Python
- Python :: 2
- Python :: 2.7
- Python :: 3
- Python :: 3.5
- Python :: 3.6
- Python :: 3.7
- Python :: 3.8
- Python :: 3.9
- Python :: Implementation :: CPython
- Python :: Implementation :: PyPy
Project description
Requests
Requests is a simple, yet elegant HTTP library.
Requests allows you to send HTTP/1.1 requests extremely easily. There’s no need to manually add query strings to your URLs, or to form-encode your PUT & POST data — but nowadays, just use the json method!
Requests is one of the most downloaded Python package today, pulling in around 14M downloads / week — according to GitHub, Requests is currently depended upon by 500,000+ repositories. You may certainly put your trust in this code.
Installing Requests and Supported Versions
Requests is available on PyPI:
Requests officially supports Python 2.7 & 3.5+.
Supported Features & Best–Practices
Requests is ready for the demands of building robust and reliable HTTP–speaking applications, for the needs of today.
- Keep-Alive & Connection Pooling
- International Domains and URLs
- Sessions with Cookie Persistence
- Browser-style TLS/SSL Verification
- Basic & Digest Authentication
- Familiar dict –like Cookies
- Automatic Content Decompression and Decoding
- Multi-part File Uploads
- SOCKS Proxy Support
- Connection Timeouts
- Streaming Downloads
- Automatic honoring of .netrc
- Chunked HTTP Requests
Python: модуль requests
requests — HTTP библиотека Python. Ближайший аналог — urllib2 .
Содержит в себе встроенную библиотеку urllib3 .
Установить requests можно спомощью PIP:
Создание запроса
Теперь r является объектом Response :
Таким образом мы можем выполнять все стандартные запросы — PUT , DELETE , HEAD and OPTIONS :
Передача аргументов в запросе
Часто необходимо передать какие-то значениями аргументам в URL. При составлении такого запроса вручную — данные передаются в виде ключ:значение в URL после вопросительного знака, например — httpbin.org/get?key=val. В requests вы можете передать их в виде словаря. В следующем примере мы хотим передать key1=value1 и key2=value2 в URL httpbin.org/get:
Данные были корректно обработа и переданы, что можно увидеть вызвав атрибут url объекта r :
Учтите, что любое значение в словаре, которое является Null не будет передано.
Что бы передать список объектов в виде значения — вы должны добавить квадратые скобки [] к ключу:
Содержимое объекта response
Мы так же можем прочитать содержимое ответа сервера:
Необработанное содержимое объекта response
В случае, если вам необходимо получить необработанные (raw) данные от сервера — вы можете воспользоваться представлением raw . При этом — убедитесь, что параметр stream для Requests установлен в True :
Однако, наиболее правильным подходом для получения и сохранения таких данных будет следующий способ:
Изменение заголовков
Если вы хотите добавить какие-то заголовки в HTTP-запрос — просто доавбьте передачу словаря с ними в параметр headers :
Более сложные запросы POST
Возможно, вам требуется отправлять более сложные запросы, например — данные форм, как формы в HTML. Что бы сделать это — просто передайте словарь с данными параметру data :
Иногда вам может потребоваться передать данные не в виде формы. Если вы передадите строку вместо словаря — данные будут добдавлены напрямую.
Например, GitHub API v3 принимает POST/PATCH в формате JSON:
POST для файлов составной кодировки
С помощью requests очень просто загрузить multipart-encoded файлы:
Вы так же можете указать имя файла, тип контента и заголовки явным образом:
При желании — вы даже можете передать обычную строку, которая будет получена как файл:
Коды состояний в requests
Вы так же можете проверить полученный код состояния:
Кроме того, в requests имеются специальный способ проверки кодов состояния:
Для работы с кодами ошибок — можно использовать метод raise_for_status :
И использовать его в конструкции try/except :
Заголовки в requests
Мы можем прочитать заголовки в овтете сервера в виде словаря Python:
Или получить только отдельное поле заголовка:
Таймауты
Мы можем указать requests использовать таймаут подключения с помощью параметра timeout :
Ошибки и исключения
В случае проблем с подключением (ошибка DNS, сброс соединения и так далее) — requests вызовет исключение ConnectionError .
В случае некорректных заголовков HTTP — будет вызвано исключение HTTPError .