Часто задаваемые вопросы

Данная часть документации отвечает на распространенные вопросы о Requests.

Поддерживается ли декодирование данных?

Requests автоматически распаковывают ответы, закодированные с помощью gzip, и делает всё возможное, чтобы декодировать содержимое ответа в Юникод, когда это возможно.

Если установлен пакет brotli или brotlicffi, requests также декодирует ответы, закодированные по Brotli.

При необходимости вы можете получить прямой доступ к необработанному ответу (и даже к сокету).

Можно ли установить свой User-Agent?

Requests позволяют легко переопределять строки User-Agent вместе с любым другим заголовком HTTP. См. документацию о заголовках.

Почему не Httplib2?

Крис Адамс дал отличное объяснение:

Модуль httplib2 не реализует всех возможностей requests: он гораздо более многословный как клиент, но не так хорошо документирован и по-прежнему требует слишком много кода для основных операций. Я ценю то, что пытается сделать httplib2, что при создании современного HTTP-клиента есть масса жёстких низкоуровневых неприятностей, но на самом деле вместо него проще использовать requests. Кеннет Рейц очень мотивирован и понимает, насколько простые вещи должны быть простыми, тогда как httplib2 больше похож на академическое упражнение, чем на то, что люди должны использовать для создания производственных систем [1].

Раскрытие информации: я указан в файле AUTHORS requests, но могу претендовать на признание, ох, около 0,0001% крутизны.

Поддерживается ли Python 3?

Да! Requests официально поддерживает Python 2.7 и 3.6+ и PyPy.

Поддержка Python 2?

Да! У нас нет ближайших планов по прекращению поддержки Python 2.7. Мы понимаем, что у нас большая база пользователей с различными потребностями, и намерены поддерживать поддержку Python 2.7 в Requests пока pip не прекратит поддержку Python 2.7 (предполагаемой даты этого пока нет).

Тем не менее, настоятельно рекомендует пользователям перейти на Python 3.6+, поскольку Python 2.7 больше не получает исправления ошибок или обновления безопасности с 1 января 2020 года.

Что за ошибка «hostname doesn’t match (имя хоста не совпадает)»?

Эти ошибки возникают, когда проверка SSL-сертификата не может соответствовать сертификату, с которым сервер отвечает на запросы имени хоста, которые, по его мнению, связываются. Если вы уверены, что настройка SSL сервера правильная (например, потому что вы можете посетить сайт с помощью своего браузера), и вы используете Python 2.7, возможное объяснение состоит в том, что вам требуется Указание-Имени-Сервера.

Указание-Имени-Сервера, или SNI, является официальным расширением SSL, в котором клиент сообщает серверу, с каким именем хоста он обращается. Это важно, когда серверы используют виртуальный хостинг. Когда на таких серверах размещается более одного SSL-сайта, они должны иметь возможность возвращать соответствующий сертификат на основе имени хоста, к которому подключается клиент.

Python3 и Python 2.7.9+ включают встроенную поддержку SNI в своём модуле SSL.