Модуль urllib.response
определяет функции и классы, которые определяют минимальный файловый интерфейс, включая методы .read()
и .readline()
. Атрибуты и функции, определенные этим модулем, используются внутри модуля urllib.request
.
Типичный объект ответа - это экземпляр urllib.response.addinfourl
:
Экземпляр urllib.response.addinfourl
в дополнение к минимальному файловому интерфейсу имеет следующие атрибуты и функции:
Response.url
:Атрибут Response.url
возвращает URL-адрес полученного ресурса, обычно используемый для определения того, был ли редирект.
Response.headers
:Атрибут Response.headers
возвращает заголовки ответа в виде экземпляра EmailMessage
.
Response.status
:Новое в Python 3.9.
Атрибут Response.status
представляет собой код состояния/ответа, возвращаемый сервером.
Response.geturl()
:Метод устарел с версии Python 3.9 в пользу Response.url
.
Response.info()
:Метод устарел с версии Python 3.9 в пользу Response.headers
.
Response.code
:Метод устарел с версии Python 3.9 в пользу Response.status
.
Response.getstatus()
:Метод устарел с версии Python 3.9 в пользу Response.status
.
Response
:Поскольку веб-сайт python.org использует кодировку utf-8, как указано в его метатеге, мы будем использовать то же самое для декодирования объекта байтов.
>>> import urllib.request >>> with urllib.request.urlopen('http://www.python.org/') as response: ... print(response.read(100).decode('utf-8')) ... # <!doctype html> # <!--[if lt IE 7]> <html class="no-js ie6 lt-ie7 lt-ie8 lt-ie9"> <![endif]-->
Того же результата можно достичь и без использования контекстного менеджера.
>>> import urllib.request >>> response = urllib.request.urlopen('http://www.python.org/') >>> print(response.read(100).decode('utf-8')) # <!doctype html> # <!--[if lt IE 7]> <html class="no-js ie6 lt-ie7 lt-ie8 lt-ie9"> <![endif]--> >>> response.status # 200 >>> dict(response.headers) # {'Connection': 'close', 'Content-Length': '49562', 'Server': 'nginx', # 'Content-Type': 'text/html; charset=utf-8', 'X-Frame-Options': 'DENY', # ... # 'Strict-Transport-Security': 'max-age=63072000; includeSubDomains'} >>> response.headers['Content-Type'] # 'text/html; charset=utf-8' >>> response.url # 'https://www.python.org/'