Передача файлов между клиентами и серверами

peredacha fajlov mezhdu klientami i serverami Сценарии на стороне сервера

Пришла пора объяснить ту часть разметки HTML, которая до этого скрывалась в тени. Обратили внимание на гиперссылки на главной странице примера выбора языка, вызывающие отображение исходного программного кода сценария CGI (на которые я предлагал не обращать внимание)? Обычно мы не видим исходный программный код таких сценариев, потому что обращение к сценарию CGI заставляет его выполняться — мы можем видеть только разметку HTML, генерируемую им для создания новой страницы. Сценарий в примере 15.26, на который ссылается гиперссылка на главной странице language.html, обходит это правило, открывая исходный файл и пересылая его содержимое как часть ответа HTML. Текст заключен в тег <PRE> как предварительно форматированный текст и преобразован с помощью cgi.escape для передачи в виде HTML.

Пример 15.26. PP4E\Internet\Web\cgi-bin\languages-src.py

#!/usr/bin/python

"Отображает содержимое сценария languages.py не выполняя его."

import cgi

filename = ‘cgi-bin/languages.py’

print(‘Content-type: text/html\n’) # обернуть в разметку HTML print(‘<TITLE>Languages</TITLE>’)

print("<H1>Source code: ‘%s'</H1>" % filename)

print(‘<HR><PRE>’)

print(cgi.escape(open(filename).read())) # декодирование выполняется

print(‘</PRE><HR>’) # с применением кодировки по умолчанию

Для нашего веб-сервера, выполняющегося в Windows, путь к файлу filename откладывается относительно каталога сервера (смотрите предыдущее обсуждение этой темы и удалите часть cgi-bin пути при опробовании примера на других платформах). Если запустить этот сценарий из Веб, щелкнув в примере 15.17 на первой гиперссылке из числа ведущих к исходным программным кодам или введя адрес URL вручную, то сценарий отправит клиенту ответ, содержащий текст файла с исходным программным кодом сценария CGI. Он показан на рис. 15.27.

Рис. 15.27. Страница просмотра исходного программного кода

Обратите внимание, что здесь также решающим обстоятельством является экранирование текста файла с помощью функции cgi.escape, потому что он встраивается в разметку HTML ответа. Если этого не сделать, все символы текста, имеющие какое-либо специальное значение в HTML, будут интерпретированы как теги HTML. Например, символ оператора C++ < в тексте этого файла может привести к странным результатам, если не экранировать его надлежащим образом. Функция cgi.escape превратит его в стандартную последовательность &lt;, которая может быть безопасно встроена в разметку HTML.

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

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

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