urllib2 — расширяемая библиотека для открытия URL-адресов
Примечание
Модуль urllib2 был разделен на несколько модулей в Python 3 под названием urllib.request и urllib.error. Инструмент 2to3 автоматически адаптирует импорты при преобразовании ваших исходных кодов в Python 3.
Модуль urllib2 определяет функции и классы, которые помогают открывать URL-адреса (в основном HTTP) в сложном мире — базовая и дайджест-аутентификация, перенаправления, куки и многое другое.
См. также
Для более высокого уровня интерфейса HTTP-клиента рекомендуется пакет Requests.
Модуль urllib2 определяет следующие функции:
-
urllib2.urlopen(url[, data[, timeout[, cafile[, capath[, cadefault[, context]]]]]) -
Открывает URL-адрес url, который может быть строкой или объектом
Request.data может быть строкой, определяющей дополнительные данные для отправки серверу, или
Noneесли такие данные не нужны. В настоящее время запросы HTTP являются единственными, которые используют data; HTTP-запрос будет POST вместо GET, когда параметр data указан. data должен быть буфером в стандартном формате application/x-www-form-urlencoded. Функцияurllib.urlencode()принимает отображение или последовательность пар из двух элементов и возвращает строку в этом формате. Модуль urllib2 отправляет HTTP/1.1 запросы с включенным заголовкомConnection:close.Необязательный параметр timeout задаёт таймаут в секундах для блокирующих операций, таких как попытка подключения (если не указан, используется глобальный значение таймаута по умолчанию). Это фактически работает только для соединений HTTP, HTTPS и FTP.
Если задан параметр context, он должен быть экземпляром
ssl.SSLContext, описывающим различные параметры SSL. Дополнительные сведения см. вHTTPSConnection.Необязательные параметры cafile и capath задают набор доверенных сертификатов CA для HTTPS-запросов. cafile должен указывать на один файл, содержащий набор сертификатов CA, а capath — на каталог файлов хешированных сертификатов. Более подробную информацию можно найти в
ssl.SSLContext.load_verify_locations().Параметр cadefault игнорируется.
Эта функция возвращает объект, подобный файлу, с тремя дополнительными методами:
-
geturl()— возвращает URL ресурса, полученного, обычно используется для определения, было ли выполнено перенаправление -
info()— возвращает мета-информацию страницы, такую как заголовки, в виде экземпляраmimetools.Message(см. Быстрое справочное руководство по HTTP-заголовкам) -
getcode()— возвращает код HTTP-статуса ответа.
При ошибках генерирует исключение
URLError.Обратите внимание, что
Noneможет быть возвращено, если ни один обработчик не обрабатывает запрос (хотя установленный по умолчанию глобальныйOpenerDirectorиспользуетUnknownHandler, чтобы гарантировать, что это никогда не произойдёт).Кроме того, если обнаружены настройки прокси (например, при установке переменной среды
*_proxy, такой какhttp_proxy), по умолчанию устанавливаетсяProxyHandler, который обеспечивает обработку запросов через прокси.Изменено в версии 2.6: Добавлен параметр timeout.
Изменено в версии 2.7.9: Добавлены параметры cafile, capath, cadefault и context.
-
-
urllib2.install_opener(opener) -
Устанавливает экземпляр
OpenerDirectorв качестве глобального открывателя по умолчанию. Установка открывателя необходима только в том случае, если вы хотите, чтобы urlopen использовал этот открывателя; в противном случае просто вызовитеOpenerDirector.open()вместоurlopen(). Код не проверяет наличие реальногоOpenerDirector, и любой класс с соответствующим интерфейсом будет работать.
-
urllib2.build_opener([handler, ...]) -
Возвращает экземпляр
OpenerDirector, который объединяет обработчики в заданном порядке. handler могут быть экземплярамиBaseHandlerили подклассамиBaseHandler(в этом случае должен быть возможен вызов конструктора без параметров). Экземпляры следующих классов будут перед handler, если только handler не содержат их, экземпляры или подклассы:ProxyHandler(если обнаружены настройки прокси),UnknownHandler,HTTPHandler,HTTPDefaultErrorHandler,HTTPRedirectHandler,FTPHandler,FileHandler,HTTPErrorProcessor.Если в установке Python есть поддержка SSL (т. е., если модуль
sslможет быть импортирован), также будет добавленHTTPSHandler.Начиная с Python 2.3, подкласс
BaseHandlerтакже может изменить свойствоhandler_orderдля изменения своего положения в списке обработчиков.
При необходимости генерируются следующие исключения:
-
exception urllib2.URLError -
Обработчики генерируют это исключение (или производные исключения) при возникновении проблемы. Это подкласс
IOError.-
reason -
Причина ошибки. Это может быть строка сообщения или другой экземпляр исключения (
socket.errorдля удалённых URL-адресов,OSErrorдля локальных URL-адресов).
-
-
exception urllib2.HTTPError -
Несмотря на то, что это исключение (подкласс
URLError),HTTPErrorтакже может функционировать как возвращаемое значение, подобное файлу, без исключений (то же, что и возвращаемое значениеurlopen()). Это полезно при обработке необычных HTTP-ошибок, например запросов для аутентификации.-
code -
Код HTTP-статуса, как определено в RFC 2616. Это числовое значение соответствует значению, найденному в словаре кодов, как в
BaseHTTPServer.BaseHTTPRequestHandler.responses.
-
reason -
Причина ошибки. Это может быть строка сообщения или другой экземпляр исключения.
-
Предоставляются следующие классы:
-
class urllib2.Request(url[, data][, headers][, origin_req_host][, unverifiable]) -
Этот класс является абстракцией запроса к URL.
url должен быть строкой, содержащей допустимый URL.
data может быть строкой, определяющей дополнительные данные для отправки на сервер, или
Noneесли такие данные не нужны. В настоящее время запросы HTTP — единственные, использующие data; запрос HTTP будет POST, а не GET, когда параметр data предоставлен. data должен быть буфером в стандартном формате application/x-www-form-urlencoded. Функцияurllib.urlencode()принимает отображение или последовательность пар 2-х элементов и возвращает строку в этом формате.headers должен быть словарем, и будет обрабатываться так, как будто вызов
add_header()был сделан с каждым ключом и значением в качестве аргументов. Это часто используется для «подмены» заголовкаUser-Agent, который используется браузером для идентификации себя — некоторые HTTP-серверы разрешают запросы только от распространённых браузеров, а не от скриптов. Например, Mozilla Firefox может идентифицировать себя как"Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11", в то время как строка пользователя агента по умолчаниюurllib2составляет"Python-urllib/2.6"(в Python 2.6).Два последних аргумента интересны только для корректной обработки сторонних HTTP-куки:
origin_req_host должен быть host запроса исходной транзакции, как определено в RFC 2965. По умолчанию значение
cookielib.request_host(self). Это имя хоста или IP-адрес исходного запроса, инициированного пользователем. Например, если запрос направлен на изображение в HTML-документе, то это должен быть host запроса страницы, содержащей изображение.unverifiable должно указывать, является ли запрос недостоверным, как определено в RFC 2965. По умолчанию значение
False. Недостоверный запрос — это запрос, URL которого пользователь не имел возможности подтвердить. Например, если запрос направлен на изображение в HTML-документе, и пользователь не имел возможности подтвердить автоматическую загрузку изображения, это должно быть true.
-
class urllib2.OpenerDirector -
Класс
OpenerDirectorоткрывает URL с помощью цепочкиBaseHandler. Он управляет цепочкой обработчиков и восстановлением после ошибок.
-
class urllib2.BaseHandler -
Это базовый класс для всех зарегистрированных обработчиков — и обрабатывает только простые механизмы регистрации.
-
class urllib2.HTTPDefaultErrorHandler -
Класс, определяющий обработчик по умолчанию для ответов HTTP с ошибками; все ответы преобразуются в исключения
HTTPError.
-
class urllib2.HTTPRedirectHandler -
Класс для обработки перенаправлений.
-
class urllib2.HTTPCookieProcessor([cookiejar]) -
Класс для обработки HTTP-куки.
-
class urllib2.ProxyHandler([proxies]) -
Принуждает запросы проходить через прокси. Если задан proxies, он должен быть словарем, сопоставляющим имена протоколов с URL-адресами прокси. По умолчанию список прокси считывается из переменных окружения
<protocol>_proxy. Если переменные окружения прокси не установлены, в среде Windows настройки прокси получаются из раздела Настройки интернета реестра, а в среде Mac OS X информация о прокси извлекается из фреймворка конфигурации системы OS X.Чтобы отключить автоматическое обнаружение прокси, передайте пустой словарь.
Примечание
HTTP_PROXYбудет проигнорирован, если установлена переменнаяREQUEST_METHOD; см. документацию поgetproxies().
-
class urllib2.HTTPPasswordMgr -
Сохраняет базу данных соответствий
(realm, uri) -> (user, password).
-
class urllib2.HTTPPasswordMgrWithDefaultRealm -
Сохраняет базу данных соответствий
(realm, uri) -> (user, password). СфераNoneрассматривается как универсальная, которая проверяется, если не подходит ни одна другая сфера.
-
class urllib2.AbstractBasicAuthHandler([password_mgr]) -
Это миксин-класс, который помогает с аутентификацией HTTP, как к удалённому хосту, так и к прокси. password_mgr, если задан, должен быть совместим с
HTTPPasswordMgr; для получения информации об интерфейсе, который необходимо поддерживать, см. раздел HTTPPasswordMgr Objects.
-
class urllib2.HTTPBasicAuthHandler([password_mgr]) -
Обрабатывает аутентификацию с удалённым хостом. password_mgr, если задан, должен быть совместим с
HTTPPasswordMgr; для получения информации об интерфейсе, который необходимо поддерживать, см. раздел HTTPPasswordMgr Objects.
-
class urllib2.ProxyBasicAuthHandler([password_mgr]) -
Обрабатывает аутентификацию с прокси. password_mgr, если задан, должен быть совместим с
HTTPPasswordMgr; для получения информации об интерфейсе, который необходимо поддерживать, см. раздел HTTPPasswordMgr Objects.
-
class urllib2.AbstractDigestAuthHandler([password_mgr]) -
Это миксин-класс, который помогает с аутентификацией HTTP, как к удалённому хосту, так и к прокси. password_mgr, если задан, должен быть совместим с
HTTPPasswordMgr; для получения информации об интерфейсе, который необходимо поддерживать, см. раздел HTTPPasswordMgr Objects.
-
class urllib2.HTTPDigestAuthHandler([password_mgr]) -
Обрабатывает аутентификацию с удалённым хостом. password_mgr, если задан, должен быть совместим с
HTTPPasswordMgr; для получения информации об интерфейсе, который необходимо поддерживать, см. раздел HTTPPasswordMgr Objects.
-
class urllib2.ProxyDigestAuthHandler([password_mgr]) -
Обрабатывает аутентификацию с прокси. password_mgr, если задан, должен быть совместим с
HTTPPasswordMgr; для получения информации об интерфейсе, который необходимо поддерживать, см. раздел HTTPPasswordMgr Objects.
-
class urllib2.HTTPHandler -
Класс для обработки открытия HTTP-URL.
-
class urllib2.HTTPSHandler([debuglevel[, context]]) -
Класс для обработки открытия HTTPS-URL. context имеет то же значение, что и для
httplib.HTTPSConnection.Изменено в версии 2.7.9: Добавлен context.
-
class urllib2.FileHandler -
Открывает локальные файлы.
-
class urllib2.FTPHandler -
Открывает FTP-URL.
-
class urllib2.CacheFTPHandler -
Открывает FTP-URL, сохраняя кэш открытых FTP-соединений для минимизации задержек.
-
class urllib2.UnknownHandler -
Универсальный класс для обработки неизвестных URL.
-
class urllib2.HTTPErrorProcessor -
Обрабатывает HTTP-отклики с ошибками.
1. Объекты запросов
Следующие методы описывают весь публичный интерфейс Request, и поэтому все они должны быть переопределены в подклассах.
-
Request.add_data(data) -
Устанавливает данные
Requestв data. Это игнорируется всеми обработчиками, кроме HTTP-обработчиков — и там это должна быть строка байтов, и это изменит запрос наPOST, а не наGET.
-
Request.get_method() -
Возвращает строку, указывающую метод HTTP-запроса. Это имеет смысл только для HTTP-запросов и в настоящее время всегда возвращает
'GET'или'POST'.
-
Request.has_data() -
Возвращает, есть ли у экземпляра данные, отличные от
None.
-
Request.get_data() -
Возвращает данные экземпляра.
-
Request.add_header(key, val) -
Добавить ещё один заголовок к запросу. В настоящее время заголовки игнорируются всеми обработчиками, за исключением обработчиков HTTP, где они добавляются в список заголовков, отправленных на сервер. Обратите внимание, что не может быть более одного заголовка с одинаковым именем, и последующие вызовы перезапишут предыдущие вызовы в случае совпадения ключ. В настоящее время это не приводит к потере функциональности HTTP, поскольку все заголовки, имеющие смысл при использовании более одного раза, имеют (специфичный для заголовка) способ получения той же функциональности, используя только один заголовок.
-
Request.add_unredirected_header(key, header) -
Добавить заголовок, который не будет добавлен к перенаправленному запросу.
Новое в версии 2.4.
-
Request.has_header(header) -
Возвращает, имеет ли экземпляр указанный заголовок (проверяет как обычные, так и неперенаправленные).
Новое в версии 2.4.
-
Request.get_full_url() -
Возвращает URL, указанный в конструкторе.
-
Request.get_type() -
Возвращает тип URL — также известный как схема.
-
Request.get_host() -
Возвращает хост, к которому будет установлено соединение.
-
Request.get_selector() -
Возвращает селектор — часть URL, отправляемая на сервер.
-
Request.get_header(header_name, default=None) -
Возвращает значение заданного заголовка. Если заголовок отсутствует, возвращает значение по умолчанию.
-
Request.header_items() -
Возвращает список кортежей (имя_заголовка, значение_заголовка) заголовков запроса.
-
Request.set_proxy(host, type) -
Подготовьте запрос, подключившись к прокси-серверу. host и type заменят значения экземпляра, а селектор экземпляра будет исходным URL, указанным в конструкторе.
-
Request.get_origin_req_host() -
Возвращает хост запроса исходной транзакции, как определено в RFC 2965. См. документацию для конструктора
Request.
-
Request.is_unverifiable() -
Возвращает, является ли запрос недопустимым для проверки, как определено в RFC 2965. См. документацию для конструктора
Request.
2. Объекты OpenerDirector
OpenerDirector экземпляры имеют следующие методы:
-
OpenerDirector.add_handler(handler) -
handler должен быть экземпляром
BaseHandler. Ищутся следующие методы и добавляются в возможные цепочки (обратите внимание, что HTTP-ошибки являются особым случаем).-
protocol_open— указывает, что обработчик знает, как открыть URL-адреса протокол. -
http_error_type— указывает, что обработчик знает, как обрабатывать HTTP-ошибки с кодом HTTP-ошибки type. -
protocol_error— указывает, что обработчик знает, как обрабатывать ошибки из (не-http) протокол. -
protocol_request— указывает, что обработчик знает, как предварительно обработать запросы протокол. -
protocol_response— указывает, что обработчик знает, как послеобработать ответы протокол.
-
-
OpenerDirector.open(url[, data][, timeout]) -
Открыть указанный url (который может быть объектом запроса или строкой), необязательно передав заданные data. Аргументы, возвращаемые значения и исключения, которые могут быть вызваны, такие же, как у
urlopen()(который просто вызывает методopen()на текущем установленным глобальномOpenerDirector). Необязательный параметр timeout задает время ожидания в секундах для блокирующих операций, таких как попытка подключения (если не указано, будет использоваться глобальное значение по умолчанию). Функция таймаута на самом деле работает только для HTTP, HTTPS и FTP подключений).Изменено в версии 2.6: Добавлен параметр timeout.
-
OpenerDirector.error(proto[, arg[, ...]]) -
Обработать ошибку данного протокола. Это вызовет зарегистрированные обработчики ошибок для данного протокола с указанными аргументами (которые специфичны для протокола). Протокол HTTP является особым случаем, который использует код ответа HTTP для определения конкретного обработчика ошибок; обратитесь к методам
http_error_*()классов обработчиков.Возвращаемые значения и исключения, которые могут быть вызваны, такие же, как у
urlopen().
Объекты OpenerDirector открывают URL-адреса в трех этапах:
Порядок вызова этих методов в каждом этапе определяется путем сортировки экземпляров обработчиков.
- Каждый обработчик с методом, имя которого похоже на
protocol_request, вызывает этот метод для предварительной обработки запроса. -
Обработчики с методом, имя которого похоже на
protocol_open, вызываются для обработки запроса. Этот этап завершается, когда обработчик либо возвращает значение, отличное отNone(т.е. ответ), либо вызывает исключение (обычноURLError). Исключение разрешено распространяться.На самом деле, алгоритм выше сначала пытается использовать методы, имена которых похожи на
default_open(). Если все такие методы возвращаютNone, алгоритм повторяется для методов, имена которых похожи наprotocol_open. Если все такие методы возвращаютNone, алгоритм повторяется для методов, имена которых похожи наunknown_open().Обратите внимание, что реализация этих методов может включать вызовы родительского экземпляра
OpenerDirectorметодовopen()иerror(). - Каждый обработчик с методом, имя которого похоже на
protocol_response, вызывает этот метод для последующей обработки ответа.
3. Объекты BaseHandler
BaseHandler объекты предоставляют несколько методов, которые напрямую полезны, а другие предназначены для использования производными классами. Эти предназначены для прямого использования:
-
BaseHandler.add_parent(director) -
Добавить директора в качестве родителя.
-
BaseHandler.close() -
Удалить всех родителей.
Следующие атрибуты и методы следует использовать только классам, производным от BaseHandler.
Примечание
Была принята конвенция, что подклассы, определяющие методы protocol_request() или protocol_response(), имеют имена *Processor, а все остальные — *Handler.
-
BaseHandler.parent -
Действительный
OpenerDirector, который можно использовать для открытия с помощью другого протокола или обработки ошибок.
-
BaseHandler.default_open(req) -
Этот метод не определен в
BaseHandler, но подклассы должны его определить, если хотят поймать все URL-адреса.Этот метод, если реализован, будет вызван родительским
OpenerDirector. Он должен вернуть объект, подобный файлу, как описано в возвращаемом значенииopen()OpenerDirector, илиNone. Он должен вызватьURLError, если не произойдёт нечто поистине исключительное (например,MemoryErrorне следует сопоставлять сURLError).Этот метод будет вызван перед любым методом открытия, специфичным для протокола.
-
BaseHandler.protocol_open(req) -
(“протокол” должен быть заменён именем протокола.)
Этот метод не определен в
BaseHandler, но подклассы должны его определить, если хотят обработать URL-адреса с данным протокол.Этот метод, если определён, будет вызван родительским
OpenerDirector. Значения возврата должны быть такими же, как уdefault_open().
-
BaseHandler.unknown_open(req) -
Этот метод не определён в
BaseHandler, но подклассы должны его определить, если они хотят обрабатывать все URL без конкретного зарегистрированного обработчика открытия.Этот метод, если он реализован, будет вызван методом
parentOpenerDirector. Значения возврата должны быть такими же, как дляdefault_open().
-
BaseHandler.http_error_default(req, fp, code, msg, hdrs) -
Этот метод не определён в
BaseHandler, но подклассы должны его переопределить, если они планируют обрабатывать все необработанные HTTP-ошибки. Он будет автоматически вызван объектомOpenerDirector, получившим ошибку, и обычно не должен вызываться в других обстоятельствах.req будет объектом
Request, fp — объектом типа «поток» (file-like object) с телом HTTP-ошибки, code — трёхзначный код ошибки, msg — отображаемое пользователю объяснение кода, а hdrs — объект сопоставления заголовков ошибки.Значения возврата и исключения, которые могут быть возбуждены, должны быть такими же, как у
urlopen().
-
BaseHandler.http_error_nnn(req, fp, code, msg, hdrs) -
nnn должен быть трёхзначным кодом HTTP-ошибки. Этот метод также не определён в
BaseHandler, но будет вызван, если он существует, на экземпляре подкласса при возникновении HTTP-ошибки с кодом nnn.Подклассы должны переопределить этот метод для обработки конкретных HTTP-ошибок.
Аргументы, значения возврата и возбуждаемые исключения должны быть такими же, как у
http_error_default().
-
BaseHandler.protocol_request(req) -
(«протокол» следует заменить именем протокола.)
Этот метод не определён в
BaseHandler, но подклассы должны его определить, если они хотят предварительно обработать запросы данного протокола.Этот метод, если он определён, будет вызван родительским
OpenerDirector. req будет объектомRequest. Возвращаемое значение должно быть объектомRequest.
-
BaseHandler.protocol_response(req, response) -
(«протокол» следует заменить именем протокола.)
Этот метод не определён в
BaseHandler, но подклассы должны его определить, если они хотят послеобработать ответы данного протокола.Этот метод, если он определён, будет вызван родительским
OpenerDirector. req будет объектомRequest. response будет объектом, реализующим тот же интерфейс, что и возвращаемое значениеurlopen(). Возвращаемое значение должно реализовывать тот же интерфейс, что и возвращаемое значениеurlopen().
4. Объекты HTTPRedirectHandler
Примечание
Некоторые HTTP-перенаправления требуют действий от клиентского кода этого модуля. В таком случае, возбуждается HTTPError. Подробности о точном значении различных кодов перенаправления см. в RFC 2616.
-
HTTPRedirectHandler.redirect_request(req, fp, code, msg, hdrs, newurl) -
Возвращает объект
RequestилиNoneв ответ на перенаправление. Это вызывается стандартными реализациями методовhttp_error_30*()при получении перенаправления от сервера. Если требуется перенаправление, возвращает новый объектRequestдля выполнения перенаправления на newurl. В противном случае возбуждаетHTTPError, если ни один другой обработчик не должен обрабатывать этот URL, или возвращаетNone, если это невозможно, но другой обработчик может.Примечание
Стандартная реализация этого метода не строго следует RFC 2616, которая утверждает, что ответы 301 и 302 на запросы
POSTне должны автоматически перенаправляться без подтверждения пользователя. На практике браузеры допускают автоматическое перенаправление таких ответов, изменяя POST наGET, и стандартная реализация воспроизводит это поведение.
-
HTTPRedirectHandler.http_error_301(req, fp, code, msg, hdrs) -
Перенаправление на
Location:илиURI:URL. Этот метод вызывается родительскимOpenerDirectorпри получении ответа HTTP «перманентно перемещено».
-
HTTPRedirectHandler.http_error_302(req, fp, code, msg, hdrs) -
То же, что и
http_error_301(), но вызывается для ответа «найдено».
-
HTTPRedirectHandler.http_error_303(req, fp, code, msg, hdrs) -
То же, что и
http_error_301(), но вызывается для ответа «см. другое».
-
HTTPRedirectHandler.http_error_307(req, fp, code, msg, hdrs) -
То же, что и
http_error_301(), но вызывается для ответа «временное перенаправление».
5. Объекты HTTPCookieProcessor
Новое в версии 2.4.
Экземпляры HTTPCookieProcessor имеют один атрибут:
-
Объект
cookielib.CookieJar, в котором хранятся куки.
6. Объекты ProxyHandler
-
ProxyHandler.protocol_open(request) -
(«протокол» следует заменить именем протокола.)
У объекта
ProxyHandlerбудет методprotocol_openдля каждого протокола, у которого есть прокси в словаре proxies, переданном в конструкторе. Метод будет изменять запросы для прохождения через прокси, вызываяrequest.set_proxy(), и вызывать следующий обработчик в цепочке для фактического выполнения протокола.
7. Объекты HTTPPasswordMgr
Эти методы доступны для объектов HTTPPasswordMgr и HTTPPasswordMgrWithDefaultRealm.
-
HTTPPasswordMgr.add_password(realm, uri, user, passwd) -
uri может быть либо одним URI, либо последовательностью URI. realm, user и passwd должны быть строками. Это приводит к использованию
(user, passwd)в качестве аутентификационных маркеров, когда требуется аутентификация для realm и супер-URI любого из указанных URI.
-
HTTPPasswordMgr.find_user_password(realm, authuri) -
Получение имени пользователя/пароля для заданного realm и URI, если таковые имеются. Этот метод вернёт
(None, None)если соответствующего имени пользователя/пароля нет.Для объектов
HTTPPasswordMgrWithDefaultRealmбудет просмотрен realmNone, если у заданного realm нет соответствующего имени пользователя/пароля.
8. Объекты AbstractBasicAuthHandler
-
AbstractBasicAuthHandler.http_error_auth_reqed(authreq, host, req, headers) -
Обработать запрос на аутентификацию, получив пару имя/пароль и повторно выполнив запрос. authreq должно быть именем заголовка, где в запросе содержится информация о домене, host определяет URL и путь для аутентификации, req — объект
Request(с ошибкой), а headers — заголовки ошибки.host может быть авторитетом (например,
"python.org") или URL, содержащим компонент авторитета (например,"http://python.org/"). В любом случае, компонент авторитета не должен содержать компонент userinfo (то есть,"python.org"и"python.org:80"подойдут, а"joe:password@python.org"— нет).
9. Объекты HTTPBasicAuthHandler
-
HTTPBasicAuthHandler.http_error_401(req, fp, code, msg, hdrs) -
Повторить запрос с информацией об аутентификации, если она доступна.
10. Объекты ProxyBasicAuthHandler
-
ProxyBasicAuthHandler.http_error_407(req, fp, code, msg, hdrs) -
Повторить запрос с информацией об аутентификации, если она доступна.
11. Объекты AbstractDigestAuthHandler
-
AbstractDigestAuthHandler.http_error_auth_reqed(authreq, host, req, headers) -
authreq должно быть именем заголовка, где в запросе содержится информация о домене, host — хост для аутентификации, req — объект
Request(с ошибкой), а headers — заголовки ошибки.
12. Объекты HTTPDigestAuthHandler
-
HTTPDigestAuthHandler.http_error_401(req, fp, code, msg, hdrs) -
Повторить запрос с информацией об аутентификации, если она доступна.
13. Объекты ProxyDigestAuthHandler
-
ProxyDigestAuthHandler.http_error_407(req, fp, code, msg, hdrs) -
Повторить запрос с информацией об аутентификации, если она доступна.
14. Объекты HTTPHandler
-
HTTPHandler.http_open(req) -
Отправить HTTP-запрос, который может быть GET или POST, в зависимости от
req.has_data().
15. Объекты HTTPSHandler
-
HTTPSHandler.https_open(req) -
Отправить HTTPS-запрос, который может быть GET или POST, в зависимости от
req.has_data().
16. Объекты FileHandler
-
FileHandler.file_open(req) -
Открыть файл локально, если нет имени хоста или имя хоста равно
'localhost'. В противном случае изменить протокол наftpи повторить попытку открытия с помощьюparent.
17. Объекты FTPHandler
-
FTPHandler.ftp_open(req) -
Открыть FTP-файл, указанный в req. Вход выполняется всегда с пустым именем пользователя и паролем.
18. Объекты CacheFTPHandler
CacheFTPHandler — это объекты FTPHandler с дополнительными методами:
-
CacheFTPHandler.setTimeout(t) -
Установить таймаут подключений на t секунд.
-
CacheFTPHandler.setMaxConns(m) -
Установить максимальное число кэшированных подключений на m.
19. Объекты UnknownHandler
-
UnknownHandler.unknown_open() -
Вызвать исключение
URLError.
20. Объекты HTTPErrorProcessor
Новое в версии 2.4.
-
HTTPErrorProcessor.http_response() -
Обработать HTTP-ответы об ошибках.
Для кодов ошибок 200 объект ответа возвращается сразу.
Для кодов ошибок, отличных от 200, эта функция просто перенаправляет задачу методам обработчика
protocol_error_codeчерезOpenerDirector.error(). В конечном итогеurllib2.HTTPDefaultErrorHandlerвызоветHTTPError, если ни один другой обработчик не обработает ошибку.
-
HTTPErrorProcessor.https_response() -
Обработать HTTPS-ответы об ошибках.
Поведение аналогично
http_response().
21. Примеры
Помимо примеров ниже, дополнительные примеры приведены в HOWTO Fetch Internet Resources Using urllib2.
Этот пример получает главную страницу python.org и отображает первые 100 байт:
>>> import urllib2
>>> f = urllib2.urlopen('http://www.python.org/')
>>> print f.read(100)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<?xml-stylesheet href="./css/ht2html
Здесь мы отправляем поток данных на stdin CGI и считываем возвращаемые данные. Обратите внимание, что этот пример будет работать только в том случае, если установка Python поддерживает SSL.
>>> import urllib2 >>> req = urllib2.Request(url='https://localhost/cgi-bin/test.cgi', ... data='This data is passed to stdin of the CGI') >>> f = urllib2.urlopen(req) >>> print f.read() Got Data: "This data is passed to stdin of the CGI"
Код примера CGI, используемого в приведенном выше примере:
#!/usr/bin/env python import sys data = sys.stdin.read() print 'Content-type: text-plain\n\nGot Data: "%s"' % data
Использование Basic HTTP аутентификации:
import urllib2
# Create an OpenerDirector with support for Basic HTTP Authentication...
auth_handler = urllib2.HTTPBasicAuthHandler()
auth_handler.add_password(realm='PDQ Application',
uri='https://mahler:8092/site-updates.py',
user='klem',
passwd='kadidd!ehopper')
opener = urllib2.build_opener(auth_handler)
# ...and install it globally so it can be used with urlopen.
urllib2.install_opener(opener)
urllib2.urlopen('http://www.example.com/login.html')
build_opener() по умолчанию предоставляет множество обработчиков, включая ProxyHandler. По умолчанию ProxyHandler использует переменные среды, названные <scheme>_proxy, где <scheme> — используемый URL-схему. Например, переменная среды http_proxy считывается для получения URL прокси-сервера HTTP.
В этом примере стандартный ProxyHandler заменяется на тот, который использует заданные программно URL прокси-серверов, и добавляется поддержка аутентификации прокси с помощью ProxyBasicAuthHandler.
proxy_handler = urllib2.ProxyHandler({'http': 'http://www.example.com:3128/'})
proxy_auth_handler = urllib2.ProxyBasicAuthHandler()
proxy_auth_handler.add_password('realm', 'host', 'username', 'password')
opener = urllib2.build_opener(proxy_handler, proxy_auth_handler)
# This time, rather than install the OpenerDirector, we use it directly:
opener.open('http://www.example.com/login.html')
Добавление HTTP-заголовков:
Используйте аргумент headers конструктора Request или:
import urllib2
req = urllib2.Request('http://www.example.com/')
req.add_header('Referer', 'http://www.python.org/')
# Customize the default User-Agent header value:
req.add_header('User-Agent', 'urllib-example/0.1 (Contact: . . .)')
r = urllib2.urlopen(req)
OpenerDirector автоматически добавляет заголовок User-Agent к каждому Request. Чтобы изменить это:
import urllib2
opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
opener.open('http://www.example.com/')
Также помните, что несколько стандартных заголовков (Content-Length, Content-Type и Host) добавляются, когда Request передается в urlopen() (или OpenerDirector.open()).
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/2.7/library/urllib2.html