import urllib.request urllib.request.build_opener([handler, ...])
handler
- обработчики открытия URL-адреса.OpenerDirector
.Функция build_opener()
модуля urllib.request
возвращает экземпляр OpenerDirector
, который связывает обработчики в указанном порядке.
Обработчики могут быть либо экземплярами BaseHandler
, либо подклассами BaseHandler
(в этом случае должна быть возможность вызывать конструктор без каких-либо параметров).
Экземпляры следующих классов будут перед обработчиками открытия URL-адреса
, если добавляемые обработчики не содержат их экземпляры или подклассы: ProxyHandler
(если обнаружены настройки прокси), UnknownHandler
, HTTPHandler
, HTTPDefaultErrorHandler
, HTTPRedirectHandler
, FTPHandler
, FileHandler
, HTTPErrorProcessor
.
Если установка Python поддерживает SSL (т.е. если модуль ssl можно импортировать), также автоматически будет добавлен HTTPSHandler
.
При создании подкласса BaseHandler
можно также изменить его атрибут handler_order
, для изменения его позиции в списке обработчиков.
urllib.request.build_opener()
:Функция urllib.request.build_opener()
по умолчанию предоставляет множество обработчиков, включая обработчик ProxyHandler
. По умолчанию ProxyHandler
использует переменные среды с именем <scheme>_proxy
, где scheme
- это задействованная схема URL. Например, переменная среды http_proxy
считывается для получения URL-адреса HTTP-прокси.
В этом примере заменяется ProxyHandler
- обработчик по умолчанию на тот, который использует программно предоставленные URL-адреса прокси, и добавляет поддержку авторизации прокси с помощью обработчика ProxyBasicAuthHandler
.
proxy_handler = urllib.request.ProxyHandler({'http': 'http://www.example.com:3128/'}) proxy_auth_handler = urllib.request.ProxyBasicAuthHandler() proxy_auth_handler.add_password('realm', 'host', 'username', 'password') # связывает обработчики в порядке прохождения запроса opener = urllib.request.build_opener(proxy_handler, proxy_auth_handler) # Здесь экземпляр `OpenerDirector` используем напрямую для открытия # URL-адреса вместо установки установки его в функцию `urllib.request.urlopen()` opener.open('http://www.example.com/login.html')