Книга посвящена разработке серверных приложений и клиент-серверных архитектур на Python. Рассказано о поддержке SSL в Python 3, представлены примеры работы с протоколами TCP, UDP, HTTP, SMTP, IMAP, FTP, RPC, взаимодействия с сервисами DNS. Освещена работа с электронной почтой в приложениях. Описаны цели протокола TLS и методы их достижения на Python. Подробно описаны возможности модуля asyncio, входящего в состав Python 3.4, даны рекомендации по разработке сетевых приложений с использованием веб-фреймворков Flask и Django.
Для программистов
ПОДРОБНОЕ РУКОВОДСТВО ПО СЕТЕВОМУ ПРОГРАММИРОВАНИЮ НА PYTHON
Книга рассказывает о разработке на языке Python клиент-серверных проектов, взаимодействующих с сетью и веб-приложениями. Всесторонне рассматривается поддержка SSL, показаны примеры работы с протоколами TCP, UDP, HTTP, SMTP, IMAP, FTP, RPC и взаимодействия с сервисами DNS. Рассказано об использовании входящего в состав Python 3.4 модуля asyncio, о сетевых возможностях веб-фреймворков Flask и Django.
В книге описаны
ключевые возможности SSL в Python 3,
цели протокола TLS и методы их достижения на Python,
архитектура серверов и создание серверных приложений,
работа с электронной почтой в приложениях,
применение Flask и Django для создания сетевых веб-приложений.
Книгу “Сетевое программирование на Python” можно купить со скидкой в интернет-магазине издательства “БХВ“.
Об авторе. 14
О рецензенте. 15
Благодарности. 16
Предисловие. 17
Пакет кода. 19
ГЛАВА 1. Введение в сетевое взаимодействие между клиентом и сервером.. 21
Содержание главы. 21
Цель 22
Основы: стеки и библиотеки. 22
Уровни приложения. 25
Что такое протокол. 26
Сетевое взаимодействие. 28
Слой за слоем. 30
Кодирование и декодирование. 32
Протокол IP. 33
IP-адреса. 34
Маршрутизация. 35
Фрагментация пакетов. 37
Подробно об IP. 38
Резюме. 38
ГЛАВА 2. Протокол UDP. 41
Содержание главы. 42
Цель 42
Множество сервисов в одной системе. 42
Сокет — точка соединения. 44
Клиенты, принимающие любые пакеты. 48
Отсрочка, блокировка и время ожидания. 50
UDP-сокеты. 54
Идентификаторы запросов. 56
От привязки до интерфейсов. 57
Фрагментация UDP. 59
Параметры сокетов. 61
Широковещание. 62
Сценарии применения UDP. 64
Резюме. 64
ГЛАВА 3. Протокол TCP. 67
Содержание главы. 67
Цель 68
Как работает TCP. 68
Когда использовать TCP. 69
Сокеты TCP. 70
TCP-клиент и TCP-сервер. 71
Одно взаимодействие — один сокет. 75
Адрес. 77
От привязки до интерфейсов. 78
Взаимоблокировка. 79
Полуоткрытые соединения, закрытые соединения. 84
Потоки TCP для передачи файлов. 86
Резюме. 86
ГЛАВА 4. DNS и имена сокетов. 89
Содержание главы. 89
Цель 89
Имена сокетов и хостов. 90
Пять координат сокетов. 91
IPv6 92
Современное разрешение адресов. 93
Привязка сервера к порту с помощью getaddrinfo() 94
Метод getaddrinfo() для привязки к сервису. 95
Получение канонического имени хоста с помощью getaddrinfo() 96
Другие флаги getaddrinfo() 98
Примитивные процедуры службы имен. 99
Метод getsockaddr() 100
Протокол DNS. 101
Почему не стоит использовать DNS напрямую.. 104
Python для DNS-запросов. 105
Разрешение почтовых доменов. 106
Резюме. 109
ГЛАВА 5. Данные и ошибки в Интернете. 111
Содержание главы. 111
Цель 111
Строки и байты. 111
Строки символов. 113
Сетевой порядок байтов и двоичные числа. 116
Кадрирование. 119
Pickle и форматы с разделителями. 125
JSON и XML. 126
Сжатие. 127
Исключения в сети. 128
Специфические исключения. 130
Исключения в сети: обнаружение и сообщение об ошибках. 131
Резюме. 133
ГЛАВА 6. Протокол SSL/TLS. 135
Содержание главы. 135
Цель 136
От чего не защищает TLS. 136
Что худшее может случиться?. 137
Создание сертификатов. 139
TLS Offloading. 141
Контексты по умолчанию в Python 3.4. 142
Подходы к обертке сокетов. 146
Выбор шифров вручную и Perfect Forward Security. 147
Поддержка протокола TLS. 149
Дальнейшее изучение. 151
Резюме. 157
ГЛАВА 7. Архитектура сервера. 159
Содержание главы. 159
Цель 160
Несколько слов о развертывании. 160
Базовый протокол. 162
Однопоточный сервер. 166
Многопроцессорный и многопоточный серверы. 169
Фреймворк SocketServer из прошлого. 171
Асинхронные серверы. 172
Фреймворк asyncio с обратными вызовами. 177
Фреймворк asyncio с сопрограммами. 179
Устаревший модуль asyncore. 181
Комбинированный подход. 182
Под влиянием inetd. 183
Резюме. 185
ГЛАВА 8. Очереди сообщений и кеши. 187
Содержание главы. 187
Цель 188
Использование Memcached (кеширование в памяти) 188
Хеширование и сегментирование. 191
Очереди сообщений. 194
Очереди сообщений в Python. 196
Резюме. 201
ГЛАВА 9. HTTP-клиенты.. 203
Содержание главы. 203
Цель 204
Библиотеки клиентов Python. 204
Кадрирование, шифрование и порты. 206
Методы. 208
Хосты и пути. 209
Коды состояний. 210
Валидация и кеширование. 213
Кодирование содержимого. 216
Согласование содержимого. 216
Тип содержимого. 218
Аутентификация по HTTP. 219
Файлы cookie. 221
Поддержание соединения и httplib. 222
Резюме. 223
ГЛАВА 10. Серверы для работы с HTTP. 225
Содержание главы. 225
Цель 226
Стандарт WSGI 226
Серверные фреймворки для асинхронной обработки. 228
Прямые и обратные прокси. 229
Четыре архитектурных стиля. 230
Python на Apache. 232
HTTP-серверы на Python. 232
Преимущество обратных прокси. 233
Платформа как услуга. 234
REST и паттерны GET и POST. 236
WSGI без фреймворка. 238
Резюме. 242
ГЛАВА 11. Всемирная паутина. 245
Содержание главы. 245
Цель 246
URL и гипермедиа. 246
Создание и парсинг URL. 247
Относительные URL. 250
Язык гипертекстовой разметки HTML. 251
Чтение и запись с использованием базы данных. 253
Ужасное веб-приложение на Flask. 255
Методы и формы HTTP. 261
Когда формы используют неподходящие методы. 263
Опасные и безопасные сookie. 264
Непостоянный межсайтовый скриптинг. 266
Постоянный межсайтовый скриптинг. 268
Подделка межсайтовых запросов. 269
Улучшенная программа. 270
Приложение для оплаты на Django. 273
Выбор фреймворка для веб-сайта. 277
Веб-сокеты. 279
Веб-скрейпинг. 279
Получение страниц. 281
Страницы для веб-скрейпинга. 285
Рекурсивный веб-скрейпинг. 287
Резюме. 291
ГЛАВА 12. Составление и парсинг сообщений электронной почты.. 293
Содержание главы. 293
Цель 294
Форматирование электронного письма. 294
Составление электронного письма. 296
HTML и мультимедиа. 298
Создание контента. 303
Парсинг электронного письма. 305
Использование MIME. 307
Кодирование заголовков. 309
Парсинг дат. 311
Резюме. 312
ГЛАВА 13. Протокол SMTP. 313
Содержание главы. 313
Цель 314
Веб-сервисы электронной почты и почтовые клиенты. 314
Все началось с командной строки. 314
Развитие клиентов. 315
Переход на веб-сервисы электронной почты. 317
Функции SMTP. 318
Передача электронной почты. 319
Получатель на конверте и заголовки. 320
Несколько прыжков. 320
Библиотека для работы с протоколом SMTP. 322
Обработка ошибок и отладка. 323
EHLO для сбора информации. 326
SSL и TLS. 329
Аутентификация SMTP. 332
Советы по SMTP. 333
Резюме. 334
ГЛАВА 14. Протокол POP. 335
Содержание главы. 335
Цель 336
Серверы POP и стандарты. 336
Аутентификация и подключение. 336
Получение информации о почтовом ящике. 339
Загрузка и удаление писем. 340
Резюме. 343
ГЛАВА 15. Протокол IMAP. 345
Содержание главы. 346
Цель 347
Реализация IMAP в Python. 347
Клиент IMAP. 349
Просмотр папок. 351
UID и номера писем. 351
Интервалы между письмами. 352
Общая информация. 352
Получение всего почтового ящика. 354
Загрузка отдельных писем. 356
Добавление и удаление флагов. 363
Удаление писем. 364
Поиск. 364
Работа с папками. 366
Асинхронность. 367
Резюме. 367
ГЛАВА 16. Протоколы SSH и Telnet 369
Содержание главы. 369
Цель 370
Автоматизация с помощью командной строки. 370
Раскрытие выражения и экранирование в командной строке. 371
Аргументы в командах UNIX.. 372
Экранирование символов. 374
Ужасная командная строка Windows 376
Терминал. 377
Терминалы и буферизация. 380
Telnet 381
SSH: безопасная оболочка. 386
SSH: краткий обзор. 386
Ключи хоста для SSH.. 387
Аутентификация в SSH.. 390
Отдельные команды и сеансы. 391
Протокол SFTP. 396
Дополнительные возможности. 399
Резюме. 399
ГЛАВА 17. Протокол FTP. 401
Содержание главы. 402
Цель 402
Что делать, если невозможно использовать FTP. 402
Каналы коммуникации. 403
FTP в Python. 404
Двоичные файлы и файлы ASCII 405
Расширенная загрузка двоичных файлов с сервера. 407
Отправка данных на удаленный компьютер. 409
Расширенная отправка двоичных данных. 410
Обработка ошибок. 411
Поиск по каталогам. 412
Обнаружение каталогов и загрузка в рекурсивном режиме. 414
Создание и удаление каталогов. 416
Безопасное использование FTP. 416
Резюме. 416
ГЛАВА 18. RPC — удаленный вызов процедур. 419
Содержание главы. 420
Цель 421
Характеристики RPC. 421
XML-RPC. 422
JSON-RPC. 429
Самодокументируемые данные. 432
Объекты: Pyro и RPyC. 434
Пример RPyC. 435
Очереди сообщений, RPC и веб-фреймворки. 438
Восстановление после ошибок в сети. 438
Резюме. 439
Предметный указатель. 441