Простой Python. Современный стиль программирования (Любанович) - страница 150

>Transfer-Encoding: chunked

Так выглядят заголовки ответов HTTP и их значения. Некоторые из них, вроде Date или Content-Type, обязательны. Другие, наподобие Set-Cookie, используются для отслеживания вашей активности в течение нескольких посещений (мы поговорим об управлении состоянием немного позже). Когда вы делаете запрос HTTP HEAD, то получаете в ответ только заголовки. Если вы использовали команды HTTP GET или HTTP POST, также получите данные от домашней страницы (смесь HTML, CSS, JavaScript и всего прочего, что Google решит разместить на своей домашней странице).

Я не хочу, чтобы вы зависли в telnet. Чтобы его закрыть, введите следующее:

>q

Стандартные веб-библиотеки Python

В Python 2 модули веб-клиентов и веб-серверов были слегка разбросаны. Одна из целей Python 3 заключается в том, чтобы разместить эти модули в двух пакетах (как вы помните из главы 5, пакет — это всего лишь папка для хранения файлов модулей).

• http управляет всеми деталями клиент-серверного взаимодействия HTTP:

• client выполняет всю работу на стороне клиента;

• server помогает вам написать веб-сервер;

• cookies и cookiejar управляют cookies, которые сохраняют данные между посещениями;

• urllib работает на базе http:

• request обрабатывает клиентские запросы;

• response обрабатывает ответы сервера;

• parse разбивает URL на части.

Воспользуемся стандартной библиотекой, чтобы получить что-нибудь с сайта. URL в следующем примере возвращает случайную текстовую цитату — это что-то вроде печенья с предсказанием:

>>>> import urllib.request as ur

>>>> url = 'http://www.iheartquotes.com/api/v1/random'

>>>> conn = ur.urlopen(url)

>>>> print(conn)

><http.client.HTTPResponse object at 0x1006fad50>

Из официальной документации (http://bit.ly/httpresponse-docs) мы можем узнать, что conn является объектом класса HTTPResponse, содержащим несколько методов, и его метод read() предоставит нам информацию о веб-странице:

>>>> data = conn.read()

>>>> print(data)

>b'You will be surprised by a loud noise.\r\n\n[codehappy]

>http://iheartquotes.com/fortune/show/20447\n'

Этот небольшой фрагмент кода открыл соединение TCP/IP с удаленным сервером цитат, создал запрос HTTP и получил HTTP-ответ. Ответ содержит не только данные о странице (цитату). Одна из наиболее важных частей ответа — это код статуса HTTP:

>>>> print(conn.status)

>200

Значение 200 означает, что все прошло гладко. Существуют десятки кодов статуса HTTP, объединенных в пять диапазонов в соответствии с их первой цифрой (сотни):

• 1xx (информация). Сервер получил запрос, но имеет некоторую дополнительную информацию для клиента;