RFC [АйТи бубен]
RFC (Request for Comments) — запрос комментариев (или заявка на обсуждение или тема для обсуждения). Документы содержащие технические спецификации и стандарты, широко применяемые в Интернет. В настоящее время первичной публикацией документов RFC занимается IETF под эгидой открытой организации Общество Интернета (Internet Society, ISOC). Правами на RFC обладает именно Общество Интернета.
Документация и переводы на русский язык RFC
RFC
RFC 2.0 — Русские Переводы RFC
Репозиторий RFC на русском языке
RFC и переводы
Примеры популярных запросов RFC
RFC на http://tools.ietf.org
Номер | Описание | Ссылка | Примечание |
---|---|---|---|
RFC 822 | Формат электронной почты, заменён RFC 2822 | Bog BOS: Формат сообщений интернет (от RFC822 к RFC2822) | |
RFC 2822 | Формат электронной почты | ||
RFC 3550 | Описан RTP -Real-Time Transport Protocol | ||
RFC 3261 | Описан Описание RFC протокола SIP: Session Initiation Protocol | 3261 | Документ довольно объемный, но тем, кто желает стать специалистом в Asterisk, рекомендуем прочитать по крайней мере первые 100 страниц и разобраться,как устанавливать соединения, поскольку эти знания будут необходимы для работы с историей SIP (sip debug из консоли Asterisk) и поиска с ее помощью причины невозможности установления соединений. |
RFC 1918 | Address Allocation for Private Internets | Описаны частные, серые, фейковый IP | 10.0.0.0 — 10.255.255.255 (10/8 prefix) 172.16.0.0 — 172.31.255.255 (172.16/12 prefix) 192.168.0.0 — 192.168.255.255 (192.168/16 prefix) |
RFC 1321 | The MD5 Message-Digest Algorithm | Наиболее важные детали русского перевода RFC 1321 | |
RFC 2425 | MIME Content-Type for Directory Information | RFC 2425 | |
RFC 2426 | vCard MIME Directory Profile | RFC 2426 | |
RFC 2516 | |||
3711 | |||
3875 | The Common Gateway Interface (CGI) Version 1. 1 | ||
4771 | |||
3330 | Special-Use IPv4 Addresses. | Зарезервированные адреса IPv4 | |
1392 | Internet Users’ Glossary, например Кто такой хакер? | ||
RFC 2131 | RFC 2131 | Описание протокола Настройка DHCP сервера Linux, FreeBSD | |
RFC 2606 | RFC 2606 | Зарезервированные доменные имена, например example.com, example.net и др. | |
RFC 821 | FQDN | Fully Qualified Domain Name — полностью определённое имя домена | |
RFC 3761 | Технология ENUM | ||
RFC 2068 | Описывает протокол Методы и структура протокола HTTP | RFC 2068 Русский- описывает протокол Методы и структура протокола HTTP/1.1. RFC 2616:Hypertext Transfer Protocol — HTTP/1. 1. rfc2068 Протокол передачи гипертекста более подробный перевод на русский. | |
RFC 959 | RFC 959 | Описан протокол Раздел FTP: Протокол FTP, серверы, клиенты FTP для Linux и Windows | |
RFC 4954 | RFC 4954 | Расширение диалога SMTP — простой протокол передачи почты командой AUTH |
18.11. rfc822 — Парсинг почтовых заголовков RFC 2822 — Документация Python 2.7.2
Устарело, начиная с версии 2.3: пакет электронной почты следует использовать вместо rfc822. модуль. Этот модуль присутствует только для обеспечения обратной совместимости, и был удален в 3.0.
Этот модуль определяет класс Message, который представляет собой сообщение», как определено стандартом Интернета RFC 2822 . [1] Такие сообщения состоит из набора заголовков сообщения и тела сообщения. Этот модуль также определяет вспомогательный класс AddressList для синтаксического анализа RFC 2822 адреса. Пожалуйста, обратитесь к RFC для получения информации о конкретном синтаксисе RFC 2822 сообщений.
Модуль почтового ящика предоставляет классы для чтения почтовых ящиков, созданных различные почтовые программы конечного пользователя.
- класс rfc822.Message ( файл [ с возможностью поиска ])
Экземпляр Message создается с входным объектом в качестве параметра. Сообщение зависит только от объекта ввода, имеющего метод readline(); в в частности, подходят обычные файловые объекты. Экземпляр читает заголовки из введите объект до строки-разделителя (обычно это пустая строка) и сохраните их в экземпляр. Тело сообщения, следующее за заголовками, не используется.
Этот класс может работать с любым объектом ввода, поддерживающим функцию readline(). метод. Если входной объект имеет возможность искать и говорить, метод rewindbody() будет работать; также недопустимые строки будут отодвинуты назад на входной поток. Если во входном объекте отсутствует поиск, но есть непрочитанный() метод, который может отодвигать строку ввода, Message будет использовать его для отодвинуть незаконные линии. Таким образом, этот класс можно использовать для разбора сообщений, приходящих из буферизованного потока.
Дополнительный с возможностью поиска 9Аргумент 0017 предоставляется в качестве обходного пути для некоторых stdio. библиотеки, в которых функция tell() отбрасывает буферизованные данные до того, как обнаружит, что системный вызов lseek() не работает. Для максимальной мобильности вы следует установить аргумент поиска равным нулю, чтобы предотвратить этот начальный Tell() при передаче невидимого объекта, такого как файловый объект, созданный из сокета объект.
Строки ввода, считанные из файла, могут завершаться либо CR-LF, либо одиночный перевод строки; завершающий CR-LF заменяется одним переводом строки перед строка сохраняется.
Все сопоставления заголовков выполняются независимо от верхнего или нижнего регистра; например m[‘From’], m[‘from’] и m[‘FROM’] дают один и тот же результат.
- класс rfc822.AddressList (поле )
Вы можете создать экземпляр вспомогательного класса AddressList, используя одну строку Параметр, разделенный запятыми список из RFC 2822 адресов для анализа. ( параметр None дает пустой список.)
- rfc822.quote( стр )
Возвращает новую строку с обратной косой чертой в str , замененную двумя обратными косыми чертами и двойные кавычки заменены на обратную косую черту — двойные кавычки.
- rfc822.unquote( ул )
Возвращает новую строку, которая представляет собой без кавычек версию str . Если стр заканчивается и начинается с двойных кавычек, они удаляются. Аналогично, если str заканчивается и начинается с угловых скобок, они снимаются.
- rfc822.parseaddr( адрес )
Разобрать адрес , который должен быть значением некоторого поля, содержащего адрес, например как или , в составляющее его «настоящее имя» и части «адреса электронной почты». Возвращает кортеж этой информации, если синтаксический анализ терпит неудачу, и в этом случае возвращается 2-кортеж (None, None).
- rfc822.dump_address_pair( пара )
Функция, обратная функции parseaddr(), принимает двойку вида (настоящее имя, email_address) и возвращает строковое значение, подходящее для или заголовок. Если первый элемент пара ложна, то второй элемент возвращается без изменений.
- rfc822.parsedate( дата )
Попытки проанализировать дату в соответствии с правилами RFC 2822 . однако некоторые почтовые программы не следуют указанному формату, поэтому функция parsedate() пытается угадывать правильно в таких случаях. date — это строка, содержащая RFC 2822 дату, например «Пн, 20 ноября 1995 г., 19:12:08 -05:00». Если удастся разобрать дата, parsedate() возвращает 9-tuple, который может быть передан непосредственно в время. mktime(); в противном случае None будет возвращено. Обратите внимание, что индексы 6, 7 и 8 результирующего кортежа нельзя использовать.
- rfc822.parsedate_tz( дата )
Выполняет ту же функцию, что и parsedate(), но возвращает либо None, либо 10-кортеж; первые 9 элементов составляют кортеж, который можно передать непосредственно в time.mktime(), а десятый — смещение часового пояса даты от UTC. (что является официальным термином для среднего времени по Гринвичу). (Обратите внимание, что знак смещение часового пояса противоположно знаку time.timezone переменная для того же часового пояса; последняя переменная соответствует стандарту POSIX в то время как этот модуль следует за
- rfc822.mktime_tz( кортеж )
Превратить кортеж из 10, возвращенный функцией parsedate_tz(), в отметку времени UTC. Если элемент часового пояса в кортеже равен None, предполагается местное время. Незначительный недостаток: это сначала интерпретирует первые 8 элементов как местное время, а затем компенсирует разницу часовых поясов; это может привести к небольшой ошибке вокруг даты перехода на летнее время. Недостаточно, чтобы беспокоиться об обычном использовании.
См. также
- Модуль электронной почты
- Комплексный пакет для обработки электронной почты; заменяет модуль rfc822.
- Модуль почтового ящика
- Классы для чтения различных форматов почтовых ящиков, создаваемых почтовыми программами конечных пользователей.
- Модуль mimetools
- Подкласс rfc822.Message, который обрабатывает закодированные сообщения MIME.
18.11.1. Message Objects
Экземпляр Message имеет следующие методы:
- Сообщение.rewindbody()
Перейти к началу тела сообщения. Это работает, только если файловый объект доступный для поиска.
Возвращает канонизированное имя поля строки (ключ словаря, который будет использоваться индексировать его), если строка является допустимым заголовком RFC 2822 ; в противном случае возвращается Нет (подразумевается, что синтаксический анализ должен быть остановлен здесь, а строка должна быть возвращена на входной поток). Иногда полезно переопределить этот метод в подкласс.
- Сообщение.islast( строка )
Возвращает true, если данная строка является разделителем, на котором сообщение должно остановиться. строка-разделитель потребляется, и место чтения файлового объекта позиционируется сразу после него. По умолчанию этот метод просто проверяет, что строка пустой, но вы можете переопределить его в подклассе.
Возвращает True, если данная строка должна быть полностью проигнорирована, просто пропущена. К по умолчанию это заглушка, которая всегда возвращает False, но вы можете переопределить ее в подкласс.
Возвращает список строк, состоящий из всех заголовков, соответствующих имени , если они есть. Каждый физическая строка, является ли она продолжением строки или нет, представляет собой отдельный список элемент. Вернуть пустой список, если ни один заголовок не соответствует name .
Вернуть список строк, содержащих первый заголовок, соответствующий имени , и его строки продолжения, если таковые имеются. Возвратите None, если нет совпадения заголовка имя .
Возвращает одну строку, состоящую из текста после двоеточия в первом заголовок соответствует имени . Это включает начальные пробелы, конечные перевод строки, а также внутренние переводы строки и пробелы, если есть какое-либо продолжение линия(и) присутствовала. Возвратите None, если нет заголовка, соответствующего имени .
Возвращает одну строку, состоящую из последнего заголовка, совпадающего с именем , но убрать начальные и конечные пробелы. Внутренние пробелы не удаляются. Факультативный по умолчанию аргумент может быть используется для указания другого значения по умолчанию, которое будет возвращено, когда нет заголовка соответствие имя ; по умолчанию нет. Это предпочтительный способ получения проанализированных заголовков.
- Message.get( имя [ по умолчанию ])
Псевдоним для getheader(), чтобы сделать интерфейс более совместимым с обычные словари.
- Сообщение.getaddr( имя )
Вернуть пару (полное имя, адрес электронной почты), проанализированную из строки, возвращенной получить заголовок (имя). Если заголовок, соответствующий имени , не существует, вернуть (None, Никто); в противном случае и полное имя, и адрес (возможно, пустые) струны.
Пример: Если m первый заголовок содержит строку ‘[email protected] (Джек Янсен)’, то m.getaddr(‘From’) даст пару («Джек Янсен», «jack@cwi. nl»). Если заголовок содержал «Джек Янсен
‘, это даст точно такой же результат.
- Message.getaddrlist( имя )
Аналогично getaddr(list), но анализирует заголовок, содержащий список адреса электронной почты (например, заголовок) и возвращает список (полный имя, адрес электронной почты) пары (даже если в шапке был только один адрес). Если нет заголовка, соответствующего name , верните пустой список.
Если существует несколько заголовков, соответствующих именованному заголовку (например, если имеется несколько заголовки), все анализируются на наличие адресов. Любые строки продолжения именованные заголовки также анализируются.
- Message.getdate( имя )
Получить заголовок с помощью getheader() и разобрать его на совместимый с 9 кортежами с time.mktime(); обратите внимание, что поля 6, 7 и 8 не используются. Если нет заголовка, соответствующего name , или он не поддается разбору, верните None.
Парсинг даты выглядит черной магией, и не все почтовые программы придерживаются стандарт. Хотя он был протестирован и признан правильным на большой коллекции электронной почты из многих источников, все еще возможно, что эта функция может иногда дают неправильный результат.
- Message.getdate_tz( имя )
Получить заголовок с помощью getheader() и разобрать его на 10-кортеж; в первые 9 элементов сделают кортеж совместимым с time.mktime(), а 10-е число — это число, указывающее смещение часового пояса даты от UTC. Обратите внимание, что поля 6, 7 и 8 не используются. Аналогично getdate(), если есть нет заголовка, совпадающего с name , или он не поддается разбору, верните None.
Экземпляры сообщений также поддерживают ограниченный интерфейс сопоставления. В в частности: m[name] похож на m.getheader(name), но вызывает KeyError если нет соответствующего заголовка; и len(m), m.get(имя[ по умолчанию]), имя в m, m. keys(), m.values() m.items() и m.setdefault(name[ default]) действует как положено, с одним отличием что setdefault() использует пустую строку в качестве значения по умолчанию. Экземпляры сообщений также поддерживают сопоставление доступного для записи интерфейса m[name] = значение и del m[имя]. Объекты сообщений не поддерживают clear(), copy(), popitem() или update() картографический интерфейс. (Поддержка get() и setdefault() была только добавлено в Python 2.2.)
Наконец, экземпляры Message имеют некоторые общедоступные переменные экземпляра:
Список, содержащий полный набор строк заголовков в том порядке, в котором они были прочитаны (за исключением того, что вызовы setitem могут нарушить этот порядок). Каждая строка содержит конечная новая строка. Пустая строка, завершающая заголовки, не содержится в список.
- Сообщение.fp
Файл или файлоподобный объект, переданный во время создания экземпляра. Это можно использовать для прочитать содержание сообщения.
- Сообщение.unix от
Строка Unix From, если она была в сообщении, или пустая строка. Это требуется для повторного создания сообщения в некоторых контекстах, таких как mbox-стиль файл почтового ящика.
18.11.2. Объекты AddressList
Экземпляр AddressList имеет следующие методы:
- Список адресов.__len__()
Возвращает количество адресов в списке адресов.
- Список адресов.__str__()
Возвращает канонизированное строковое представление списка адресов. Адреса отображается в форме «имя» <хост@домен>, разделенных запятыми.
- AddressList.__add__( список )
Возвращает новый экземпляр AddressList, содержащий все адреса в обоих Операнды AddressList с удаленными дубликатами (установить объединение).
- Список адресов.__iadd__( список )
Версия на месте __add__(); превращает этот экземпляр AddressList в союз самого себя и правого экземпляра, алист .
- Список адресов.__sub__( список )
Возвращает новый экземпляр AddressList, содержащий все адреса в левый операнд AddressList, которого нет в правом операнд адреса (установить разность).
- AddressList.__isub__( список )
Местная версия __sub__(), удаление адресов из этого списка, которые также в алист .
Наконец, экземпляры AddressList имеют одну общедоступную переменную экземпляра:
- Список адресов.список адресов
Список пар строк кортежей, по одной на адрес. В каждом члене первым является канонизированная часть имени, вторая — фактический адрес-маршрут (пара «@», разделенная именем пользователя-хост.домен).
Сноски
[1] | Первоначально этот модуль соответствовал RFC 822 , отсюда и название. С того времени, RFC 2822 был выпущен как обновление RFC 822 . Этот модуль должен быть считается совместимым с RFC 2822 , особенно в тех случаях, когда синтаксис или семантика изменилась с RFC 822 . |
rfc822 — Стандартная библиотека Python
Управление сообщениями RFC 2822.
Примечание. Это лишь очень грубый набросок полного синтаксического анализатора RFC-822; в частности токенизация адресов не соответствует всем правилам цитирования.
Примечание. RFC 2822 — это долгожданное обновление RFC 822. Этот модуль должен соответствует RFC 2822, поэтому назван неправильно (не стоит переименовывать). Некоторый были предприняты усилия по обновлению RFC 2822, но тщательный аудит не проводился. выполненный. Считайте любое несоответствие RFC 2822 ошибкой.
RFC 2822: http://www.faqs.org/rfcs/rfc2822.html RFC 822 : http://www.faqs.org/rfcs/rfc822.html (устарело)
Инструкции по использованию:
Чтобы создать объект сообщения: сначала откройте файл, например:
fp = open(file, ‘r’)
Вы можете использовать любой другой законный способ получения открытого файлового объекта, например использовать sys. stdin или вызовите os.popen(). Затем передайте объект открытого файла в Message() конструктор:
m = Message(fp)
Этот класс может работать с любым объектом ввода, поддерживающим метод readline. Если входной объект имеет возможность искать и говорить, метод rewindbody будет работа; также недопустимые строки будут возвращены во входной поток. Если входной объект не имеет поиска, но имеет «непрочитанный» метод, который может отодвигать строку назад ввода, Message будет использовать его для отбрасывания недопустимых строк. Таким образом, этот класс может использоваться для разбора сообщений, поступающих из буферизованного потока.
Необязательный аргумент `seekable’ предоставляется в качестве обходного пути для некоторых stdio. библиотеки, в которых функция tell() отбрасывает буферизованные данные до того, как обнаружит, что Системный вызов lseek() не работает. Для максимальной переносимости следует установить искомый аргумент равен нулю, чтобы предотвратить этот начальный код{сообщение} при передаче недоступный для поиска объект, такой как файловый объект, созданный из объекта сокета. Если это 1 при входе — что по умолчанию — метод tell () открытия файловый объект вызывается один раз; если это вызывает исключение, поиск сбрасывается на 0. Для других ненулевых значений seekable этот тест не проводится.
Есть несколько способов получить текст определенного заголовка:
ул = m.getheader(имя) str = m.getrawheader(name)
, где name — это имя заголовка, например ‘Предмет’. Разница в том, что getheader() удаляет начальные и конечные пробелы, а getrawheader() нет. Обе функции сохраняют встроенные пробелы (включая новые строки) именно так, как они указаны в шапке, и оставить регистр текста без изменений.
Для адресов и списков адресов есть функции
настоящее имя, почтовый адрес = m.getaddr(имя) list = m.getaddrlist(name)
, где последний возвращает список кортежей (realname, mailaddr).
Также есть метод
time = m.getdate(name)
, который анализирует поле, подобное дате, и возвращает кортеж, совместимый со временем, то есть кортеж, например, возвращенный time. localtime() или принятый время.mktime().
См. определение класса для методов доступа более низкого уровня.
Здесь также есть некоторые вспомогательные функции.
Функции
dump_address_pair (пара) | Дамп пары (имя, адрес) в канонизированной форме. |
formatdate ([timeval]) | Возвращает формат времени, предпочтительный для интернет-стандартов. |
mktime_tz (данные) | Превратите кортеж из 10, возвращенный функцией parsedate_tz(), в отметку времени UTC. |
парсеаддр (адрес) | Разобрать адрес в кортеж (realname, mailaddr). |
парседата (данные) | Преобразование строки времени в кортеж времени. |
parsedate_tz (данные) | Преобразование строки даты в кортеж времени. |