Сообщить об ошибке.

Функция build_opener() модуля urllib.request в Python

Связывает обработчики открытия URL-адреса в указанном порядке

Синтаксис:

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')