Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 201

HEAD, то получаете в ответ только заголовки. Если вы использовали команды HTTP

GET или HTTP POST, также получите данные от домашней страницы (смесь HTML,

CSS, JavaScript и всего прочего, что Google решит разместить на своей домашней

странице).

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

q

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

В Python 2 модули веб-клиентов и веб-серверов были слегка разбросаны. Одна из

целей Python 3 заключается в том, чтобы разместить эти модули в двух пакетах

(как вы помните из главы 5, пакет — это всего лишь папка для хранения файлов

модулей).

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

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

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

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

посещениями;

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

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

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

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

Веб-клиенты

261

Воспользуемся стандартной библиотекой, чтобы получить что-нибудь с сайта.

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 (информация). Сервер получил запрос, но имеет некоторую дополнительную

информацию для клиента;

 2xx (успех). Сработало, каждый код успеха, кроме 200, сообщает дополнитель-

ные детали;

 3xx (перенаправление). Ресурс был перемещен, поэтому ответ возвращает кли-