Обработка cookies с помощью модуля urllib. request

obrabotka cookies s pomoshhju modulya urllib request Сценарии на стороне сервера

Как уже упоминалось выше, модуль urllib.request предоставляет интерфейс для чтения страниц ответа по заданному адресу URL и использует модуль http.cookiejar для поддержки сохранения cookies на стороне клиента и отправки их на сервер. Однако эта поддержка не обеспечивается по умолчанию. Например, ниже выполняется тестирование сценария установки cookies из предыдущего раздела — при повторном обращении к сценарию cookies не возвращаются обратно на сервер:

>>> from urllib.request import urlopen

>>> reply = urlopen(‘http://localhost/cgi-bin/cookies.py’).read()

>>> print(reply)

b'<p>His name shall beSet-Cookie: user=Brian</p>\n’

>>> reply = urlopen(‘http://localhost/cgi-bin/cookies.py’).read()

>>> print(reply)

b'<p>His name shall beSet-Cookie: user=Brian</p>\n’

Для корректной поддержки cookies с помощью этого модуля нам нужно просто включить в работу класс обработки cookies — то же относится и к другим необязательным расширениям, реализованным в этом модуле. Попробуем вновь обратиться к сценарию из предыдущего раздела:

>  >> import urllib.request as urllib

>  >> opener = urllib.build_opener(urllib.HTTPCookieProcessor())

>  >> urllib.install_opener(opener)

>>> 

>>> reply = urllib.urlopen(‘http://localhost/cgi-bin/cookies.py’).read()

>>> print(reply)

b'<p>His name shall beSet-Cookie: user=Brian</p>\n’

>>> reply = urllib.urlopen(‘http://localhost/cgi-bin/cookies.py’).read()

>>> print(reply)

b'<p>Welcome back, Brian</p>\n’

>>> reply = urllib.urlopen(‘http://localhost/cgi-bin/cookies.py’).read()

>>> print(reply)

b'<p>Welcome back, Brian</p>\n’

Теперь все работает, потому что модуль urllib.request имитирует поведение веб-броузера в отношении cookies — он сохраняет cookies, когда эта операция запрашивается в заголовках страницы ответа, генерируемой сценарием, и добавляет их в заголовки при повторных обращениях к этому же сценарию. Кроме того, так же, как и броузер, этот модуль удалит cookies при завершении и повторном запуске интерактивного сеанса Python и повторном выполнении этого программного кода. Информацию об интерфейсах этого модуля смотрите в руководстве по стандартной библиотеке.

Несмотря на удобства в использовании, cookies имеют свои недостатки. Во-первых, они имеют ограниченный размер (типичные ограничения: 4 Кбайта на один блок данных cookies, не более 300 cookies всего и не более 20 cookies для каждого доменного имени). Во-вторых, в большинстве броузеров имеется возможность отключить cookies, что делает их непригодными для хранения критически важных данных. Некоторые даже рассматривают их, как вторжение в систему, потому что их можно использовать для слежения за действиями пользователя. (Многие сайты просто требуют, чтобы поддержка cookies была включена, устраняя тем самым эту проблему.) Наконец, поскольку cookies передаются между клиентом и сервером через сеть, они защищены в той же мере, в какой защищен сам поток данных — может быть далеко небезопасно передавать секретные данные, если для доступа к странице не используется защищенный протокол HTTP. Защищенные cookies и серверные концепции мы исследуем в следующей главе.

За дополнительной информацией о модулях, реализующих поддержку cookies, и о протоколах работы с cookies в целом обращайтесь к руководству по стандартной библиотеке Python и к ресурсам в Сети. Вполне возможно, что в будущем похожие механизмы хранения данных будут предоставлять реализации HTML.

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий