справочник по Python. мм isbn 9785932861578 9 785932 861578
Скачать 4.21 Mb.
|
m.set_default_type(ctype) Устанавливает для сообщения тип содержимого по умолчанию ctype. В ар- гументе ctype передается строка, содержащая название типа MIME, такая как ‘text/plain’ или ‘message/rfc822’. Этот тип не сохраняется в заголовке ‘Content-type’ сообщения. Пакет email 691 m.set_param(param, value [, header [, requote [, charset [, language]]]]) У станавливает значение параметра заголовка. В аргументе param передает- передает- ся имя параметра, а в аргументе value – его значение. Аргумент header опре- деляет имя заголовка, по умолчанию подразумевается заголовок ‘Content- type’ . Аргумент requote определяет необходимость заключения в кавычки всех значений, присутствующих в заголовке, после добавления параметра. По умолчанию этот аргумент принимает значение True. Аргументы charset и language определяют дополнительную информацию о кодировке симво- лов и языке. Если эти аргументы заданы, параметры сохраняются в фор- мате RFC-2231. Этот метод добавляет текст с определением параметра вида param*=”’iso-8859-1’en-us’some%20value” m.set_payload(payload [, charset]) Сохраняет значение аргумента payload как содержимое сообщения. Для простых сообщений в аргументе payload можно передать строку байтов с те- лом сообщения. Для сообщений, состоящих из нескольких частей, в аргу- менте payload передается список объектов класса Message. Необязательный аргумент charset определяет кодировку символов, которая была использо- вана при создании текста (смотрите описание метода set_charset()). m.set_type(type [, header [, requote]]) Устанавливает тип содержимого, который будет записан в заголовок ‘Con- tent-type’ . В аргументе type передается строка, такая как ‘text/plain’ или ‘multipart/mixed’ , определяющая тип. Аргумент header определяет альтер- определяет альтер- альтер- альтер- нативный заголовок, отличный от заголовка по умолчанию ‘Content-type’. Аргумент requote определяет необходимость заключения в кавычки всех значений, уже присутствующих в заголовке, после добавления параметра. По умолчанию принимает значение True. m.set_unixfrom(unixfrom) Устанавливает текст для строки ‘From ...’ в стиле UNIX. В аргументе unix- from должна передаваться строка, содержащая полный текст, включая пре- фикс ‘From’. Этот текст выводится, только если в вызове метода m.as_string() аргумент unixfrom получает значение True. Вместо того, чтобы создавать низкоуровневые объекты класса Message и каждый раз конструировать сообщения с нуля, можно использовать уже готовые объекты сообщений, сконструированные для различных типов со- держимого. Эти объекты особенно удобно использовать при создании со- общений, состоящих из нескольких частей. Например, можно создать но- вое сообщение и присоединить к нему различные части, воспользовавшись методом attach() объекта класса Message. Каждый из этих объектов опреде- ляется в собственном, отдельном модуле, название которого указывается в описании. MIMEApplication(data [, subtype [, encoder [, **params]]]) Объявляется в модуле email.mime.application. Создает сообщение, содер- Создает сообщение, содер- сообщение, содер- сообщение, содер- , содер- содер- жащее данные приложения. В аргументе data передается строка байтов с двоичными данными. Аргумент subtype определяет подтип данных и по 692 Глава 24. Обработка и представление данных в Интернете умолчанию принимает значение ‘octet-stream’. В необязательном аргумен- В необязательном аргумен- те encoder передается функция кодирования из подпакета email.encoders. По умолчанию данные преобразуются в формат base 64. Аргумент params представляет дополнительные именованные аргументы и значения, кото- рые должны быть добавлены в заголовок ‘Content-type’ сообщения. MIMEAudio(data [, subtype [, encoder [, **params]]]) Объявляется в модуле email.mime.audio. Создает сообщение, содержащее аудиоданные. В аргументе data передается строка байтов с двоичными аудио данными. Аргумент subtype определяет тип аудиоданных и может быть строкой, такой как ‘mpeg’ или ‘wav’. Если аргумент subtype отсутству- ет, предположительный тип аудиоданных будет определен автоматически, с помощью модуля sndhdr. Аргументы encoder и params имеют тот же смысл, что и в функции MIMEApplication(). MIMEImage(data [, subtype [, encoder [, **params]]]) Объявляется в модуле email.mime.image. Создает сообщение, содержащее изображение. В аргументе data передается строка байтов с двоичным пред- ставлением изображения. Аргумент subtype определяет тип изображения и может быть строкой, такой как ‘jpg’ или ‘png’. Если аргумент subtype от- сутствует, предположительный тип изображения будет определен автома- тически, с помощью функции из модуля imghdr. Аргументы encoder и params имеют тот же смысл, что и в функции MIMEApplication(). MIMEMessage(msg [, subtype]) Объявляется в модуле email.mime.message. Создает новое сообщение MIME, состоящее из одной части. В аргументе msg передается объект сообщения с начальным содержимым. Аргумент subtype определяет тип сообщения и по умолчанию принимает значение ‘rfc822’. MIMEMultipart([subtype [, boundary [, subparts [, **params]]]]) Объявляется в модуле email.mime.multipart. Создает новое сообщение MIME, состоящее из нескольких частей. Аргумент subtype определяет необяза- тельный подтип, который будет добавлен в заголовок ‘Content-type: mul- Content-type: mul- -type: mul- type: mul- : mul- mul- tipart/subtype’ . По умолчанию принимает значение ‘mixed’. В аргументе boundary передается строка, которая будет использоваться в качестве гра- ницы, отделяющей части сообщения. Если этот аргумент опущен или в нем передается значение None, подходящая строка границы будет подобрана ав- томатически. В аргументе subparts передается последовательность объек- передается последовательность объек- последовательность объек- последовательность объек- объек- объек- тов класса Message, составляющих содержимое сообщения. Аргумент params представляет дополнительные именованные аргументы и значения, кото- рые должны быть добавлены в заголовок ‘Content-type’ сообщения. После создания сообщения, состоящего из нескольких частей, добавлять в него новые части можно будет с помощью метода Message.attach(). MIMEText(data [, subtype [, charset]]) Объявляется в модуле email.mime.text. Создает сообщение с текстовыми данными. В аргументе data передается строка с текстом сообщения. Аргу- передается строка с текстом сообщения. Аргу- строка с текстом сообщения. Аргу- строка с текстом сообщения. Аргу- с текстом сообщения. Аргу- с текстом сообщения. Аргу- текстом сообщения. Аргу- текстом сообщения. Аргу- сообщения. Аргу- сообщения. Аргу- . Аргу- Аргу- мент subtype определяет тип текста и может быть строкой, такой как ‘plain’ Пакет email 693 ( по умолчанию) или ‘html’. Аргумент charset определяет кодировку симво- лов и по умолчанию принимает значение ‘us-ascii’. Кодирование сообще- ния выполняется в зависимости от его содержимого. Следующий пример демонстрирует, как можно составить сообщение и от- править его по электронной почте, используя классы, представленные в этом разделе: import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.audio import MIMEAudio ёёё sender = “jon@nogodiggydie.net” receiver = “dave@dabeaz.com” subject = “Faders up!” body = “I never should have moved out of Texas. -J.\n” audio = “TexasFuneral.mp3” ёёё m = MIMEMultipart() m[“to”] = receiver m[“from”] = sender m[“subject”] = subject ёёё m.attach(MIMEText(body)) apart = MIMEAudio(open(audio,”rb”).read(),”mpeg”) apart.add_header(“Content-Disposition”,”attachment”,filename=audio) m.attach(apart) ёёё # Отправить сообщение по электронной почте s = smtplib.SMTP() s.connect() s.sendmail(sender, [receiver],m.as_string()) s.close() Примечания • Многие из дополнительных параметров и настроек здесь не рассматри- вались. Тем, кому потребуется воспользоваться дополнительными воз- можностями этого пакета, рекомендуется обращаться к электронной документации. • В процессе развития пакета email было выпущено по меньшей мере че- тыре различные версии, в которых программный интерфейс достаточ- но существенно изменялся (то есть модули пакета переименовывались, определения классов переносились в другие модули и так далее). В этом разделе был описан интерфейс версии 4.0, которая используется в Py- Py- thon 2.6 и Python 3.0. Если вам доведется сопровождать устаревший программный код, вы также сможете применять изложенные здесь концепции, но вам придется изменить местоположение классов и име- на модулей. 694 Глава 24. Обработка и представление данных в Интернете Модуль hashlib М одуль hashlib реализует различные алгоритмы вычисления контрольных сумм сообщений, такие как MD5 и SHA1. Чтобы вычислить значение кон- MD5 и SHA1. Чтобы вычислить значение кон- 5 и SHA1. Чтобы вычислить значение кон- SHA1. Чтобы вычислить значение кон- 1. Чтобы вычислить значение кон- трольной суммы, сначала требуется вызвать одну из следующих функций, имена которых соответствуют названиям алгоритмов: Функция Описание md5() Контрольная сумма MD5 (128 бит) sha1() Контрольная сумма SHA1 (160 бит) sha224() Контрольная сумма SHA224 (224 бита) sha256() Контрольная сумма SHA256 (256 бит) sha384() Контрольная сумма SHA384 (384 бита) sha512() Контрольная сумма SHA512 (512 бит) Экземпляр d объекта контрольной суммы, возвращаемый любой из этих функций, имеет следующий интерфейс: Метод или атрибут Описание d.update(data) Обновляет контрольную сумму с учетом добавления новых данных. Аргумент data должен быть строкой байтов. По- следовательность нескольких вызовов равноценна одному вызову для всего объема данных. d.digest() Возвращает контрольную сумму в виде строки двоичных байтов. d.hexdigest() Возвращает текстовую строку со значением контрольной суммы, представленной в виде последовательности шест- надцатеричных цифр. d.copy() Возвращает копию объекта контрольной суммы. Копия на- следует значения внутренних переменных оригинала. d.digest_size Размер контрольной суммы в байтах. d.block_size Внутренний размер блока в байтах, используемый алгорит- мом хеширования. Кроме того, модулем предоставляется альтернативный интерфейс созда- ния объектов контрольных сумм: new(hashname) Создает новый объект контрольной суммы. В аргументе hashname передается строка с названием алгоритма хеширования, такая как ‘md5’ или ‘sha256’. В качестве имени алгоритма можно использовать имена алгоритмов, пред- ставленные выше, а также имена алгоритмов, объявленные в библиотеке OpenSSL (зависит от параметров сборки интерпретатора). Модуль hmac 695 Модуль hmac М одуль hmac обеспечивает поддержку механизма HMAC (Keyed-Hashing for Message Authentication – хеш-код аутентификации сообщений), который описывается в RFC-2104. HMAC – это механизм, используемый для аутен- RFC-2104. HMAC – это механизм, используемый для аутен- -2104. HMAC – это механизм, используемый для аутен- HMAC – это механизм, используемый для аутен- – это механизм, используемый для аутен- тификации сообщений, основанный на криптографических функциях вы- числения контрольных сумм, таких как MD5 и SHA-1. new(key [, msg [, digest]]) Создает новый объект HMAC, где key – это строка байтов с начальным зна- чением хеша, msg – начальные данные для обработки и digest – конструк- тор объекта контрольной суммы, который будет использоваться при вы- числении хеш-кода. По умолчанию в качестве конструктора используется функция hashlib.md5(). Обычно начальное значение ключа определяется как случайное число, полученное с применением генератора случайных чисел, обладающего улучшенной криптографической стойкостью. Объект h класса HMAC обладает следующими методами: h.update(msg) Добавляет строку msg в объект класса HMAC. h.digest() Возвращает контрольную сумму всех данных, обработанных к настоя- щему моменту, в виде строки байтов, содержащую значение контрольной суммы. Длина строки с результатом зависит от используемого алгоритма хеширования. Для MD5 это будет строка из 16 символов; для SHA-1 – из 20 символов. h.hexdigest() Возвращает контрольную сумму в виде строки из шестнадцатеричных цифр. h.copy() Создает копию объекта HMAC. Пример Основное назначение модуля hmac заключается в том, чтобы обеспечить аутен тификацию отправителя сообщения. Для этого в аргументе key функ- ции new() передается строка байтов с секретным ключом, известным обеим сторонам – отправителю и получателю сообщения. Посылая сообщение, отправитель создает новый объект HMAC с заданным ключом, обновляет его содержимым сообщения и затем отправляет сообщение вместе с получив- шейся контрольной суммой HMAC. Принимающая сторона проверяет сооб- HMAC. Принимающая сторона проверяет сооб- . Принимающая сторона проверяет сооб- щение, вычисляет собственную контрольную сумму HMAC (используя тот же ключ и содержимое сообщения) и сравнивает полученный результат со значением контрольной суммы, принятым вместе с сообщением. Например: import hmac secret_key = b”peekaboo” # Строка байтов, известная только мне. Обычно # предпочтительнее использовать строку случайных 696 Глава 24. Обработка и представление данных в Интернете # байтов, сгенерированных с помощью os.urandom() или # или подобной ей функции. ёёё data = b”Hello World” # Текст сообщения ёёё # Отправка сообщения # out – это сокет или какой-либо другой канал ввода-вывода, # используемый для отправки данных. h = hmac.new(secret_key) h.update(data) out.send(data) # Отправка данных out.send(h.digest()) # Отправка контрольной суммы ёёё # Прием сообщения # in – это сокет или какой-либо другой канал ввода-вывода, # используемый для приема данных. h = hmac.new(secret_key) data = in.receive() # Прием данных сообщения h.update(data) digest = in.receive() # Прием контрольной суммы, отправленной отправителем if digest != h.digest(): raise AuthenticationError(‘Message not authenticated’) Модуль HTMLParser В Python 3 этот модуль называется html.parser. Модуль HTMLParser опреде- опреде- ляет класс HTMLParser, который может использоваться для синтаксического анализа документов HTML и XHTML. Чтобы воспользоваться этим моду- и XHTML. Чтобы воспользоваться этим моду- XHTML. Чтобы воспользоваться этим моду- Чтобы воспользоваться этим моду- лем, в программе необходимо объявить собственный класс, производный от класса HTMLParser, и переопределить необходимые методы. HTMLParser() Базовый класс, используемый для создания парсеров разметки HTML. Не имеет входных аргументов. Экземпляр h класса HTMLParser обладает следующими методами: h.close() Закрывает парсер и принудительно запускает анализ всех необработанных данных. Этот метод вызывается после того, как все данные HTML будут переданы парсеру. h.feed(data) Передает парсеру новые данные. Эти данные обрабатываются немедлен- парсеру новые данные. Эти данные обрабатываются немедлен- парсеру новые данные. Эти данные обрабатываются немедлен- новые данные. Эти данные обрабатываются немедлен- новые данные. Эти данные обрабатываются немедлен- данные. Эти данные обрабатываются немедлен- данные. Эти данные обрабатываются немедлен- . Эти данные обрабатываются немедлен- Эти данные обрабатываются немедлен- данные обрабатываются немедлен- данные обрабатываются немедлен- обрабатываются немедлен- обрабатываются немедлен- немедлен- немедлен- но. Однако если данные неполные (например, завершаются незакрытым элементом HTML), незаконченный фрагмент будет сохранен в буфере и об- HTML), незаконченный фрагмент будет сохранен в буфере и об- ), незаконченный фрагмент будет сохранен в буфере и об- работан при следующем вызове метода feed(), когда будут получены недо- стающие данные. h.getpos() Возвращает номер текущей строки и номер текущего символа в строке в виде кортежа (line, offset). Модуль HTMLParser 697 h.get_starttag_text() Возвращает текст, соответствующий самому последнему открытому на- чальному тегу. h.handle_charref(name) Этот метод-обработчик вызывается всякий раз, когда встречается ссылка на символ, такая как ‘ref;’. В аргументе name передается строка со значе- нием ссылки. Например, при встрече ссылки ‘å’ в аргументе name будет передана строка ‘229’. h.handle_comment(data) Этот метод-обработчик вызывается всякий раз, когда встречается коммен- тарий. В аргументе data передается строка с текстом комментария. Напри- мер, при встрече комментария ‘’ в аргументе data будет пере- дана строка ‘comment’. |