Upload
sydnee-woodward
View
34
Download
0
Embed Size (px)
DESCRIPTION
Поддержка протоколов Internet. c gi - протокол CGI используемый для интерпретации форм HTML на стороне сервера. FastCGI - протокол взаимодействия вебсервера и приложения, дальнейшее развитие технологии CGI . u rllib - чтение произвольных ресурсов по URL. u rlparse - операции над URL. - PowerPoint PPT Presentation
Citation preview
Поддержка протоколов Поддержка протоколов InternetInternet
ccgigi - протокол CGI используемый для - протокол CGI используемый для интерпретации форм HTML на стороне сервера. интерпретации форм HTML на стороне сервера.
FastCGIFastCGI - - протокол взаимодействия протокол взаимодействия вебсервера и приложения, дальнейшее вебсервера и приложения, дальнейшее развитие технологии развитие технологии CGICGI. .
uurllibrllib - чтение произвольных ресурсов по URL. - чтение произвольных ресурсов по URL.
uurlparserlparse - операции над URL. - операции над URL.
ccgigi - протокол CGI - протокол CGI
CGI-программаCGI-программа вызывается HTTP- вызывается HTTP-сервером, обычно для обработки сервером, обычно для обработки данных. HTTP-сервер помещает данных. HTTP-сервер помещает информацию о запросе в переменные информацию о запросе в переменные окружения программы, выполняет окружения программы, выполняет программу и пересылает клиенту его программу и пересылает клиенту его вывод. вывод.
HTTPHTTP - - протокол передачи гипертекста. протокол передачи гипертекста. Обмен сообщениями идёт по Обмен сообщениями идёт по обыкновенной схеме «запрос-ответ». обыкновенной схеме «запрос-ответ». Для идентификации ресурсов HTTP Для идентификации ресурсов HTTP использует глобальные использует глобальные URL.URL.
Всё программное обеспечение для работы с протоколом Всё программное обеспечение для работы с протоколом
HTTP разделяется на три больших категории:HTTP разделяется на три больших категории: СерверыСерверы как основные поставщики как основные поставщики
услуг хранения и обработки услуг хранения и обработки информации (обработка запросов).информации (обработка запросов).
КлиентыКлиенты — конечные потребители — конечные потребители услуг сервера (отправка запроса).услуг сервера (отправка запроса).
ПроксиПрокси для выполнения транспортных для выполнения транспортных служб.служб.
TCP/IPTCP/IP Стек протоколов TCP/IPСтек протоколов TCP/IP — набор сетевых — набор сетевых
протоколов разных уровней, используемых в протоколов разных уровней, используемых в сетях. Протоколы работают друг с другом сетях. Протоколы работают друг с другом в стекев стеке..
Уровни стека TCP/IP:Уровни стека TCP/IP: ПрикладнойПрикладной ( (HTTP)HTTP) ПредставительскийПредставительский СеансовыйСеансовый ТранспортныйТранспортный (TCP)(TCP) СетевойСетевой (IP)(IP) КанальныйКанальный ФизическийФизический
Для передачи переменных используется два Для передачи переменных используется два HTTP метода: HTTP метода: GETGET и и POSTPOST
Метод Метод GETGET отправляет скрипту всю отправляет скрипту всю собранную информацию формы как часть URL:собранную информацию формы как часть URL:http://www.komtet.ru/script.php?login=admin&namhttp://www.komtet.ru/script.php?login=admin&name=komtete=komtet
Метод Метод POSTPOST передает данные таким образом, передает данные таким образом, что пользователь сайта уже не видит что пользователь сайта уже не видит передаваемые скрипту данные:передаваемые скрипту данные:http://www.komtet.ru/script.phphttp://www.komtet.ru/script.php
Вывод CGI-программыВывод CGI-программы должен состоять из должен состоять из двух частейдвух частей, , разделенных пустой строкой. Первая часть содержит разделенных пустой строкой. Первая часть содержит набор заголовков, которые описывают тип данных, набор заголовков, которые описывают тип данных, следующих во втором разделе. следующих во втором разделе.
#вначале выводятся заголовки print "Content-Type: text/html" # Определение типа HTML print # Пустая строка: конец заголовков # теперь выводим основной текст в формате HTML print "<html>" print "<title>Вывод CGI-программы</title>" print "<body>" print "<h1>Это моя первая CGI-программа</h1>" print "Привет всему миру!" print "</body>" print "</html>"
основная область применения CGI – для основная область применения CGI – для
обработки информации из формобработки информации из форм.. передача параметров в CGI скрипт передача параметров в CGI скрипт
осуществляется двумя методами: осуществляется двумя методами:
прямой передачей параметров в имени URL в прямой передачей параметров в имени URL в формате “формате “http://http://адрес_скрипта?адрес_скрипта?имя_параметра1=значение_параметра1&имяимя_параметра1=значение_параметра1&имя_параметра2=значение2..._параметра2=значение2...””
передача параметров через HTML форму. передача параметров через HTML форму.
во втором случае необходимо во втором случае необходимо применение модуля применение модуля cgicgi: :
import cgiimport cgi
##чтобы включить обработку ошибок :чтобы включить обработку ошибок : import cgitb; cgitb.enable()import cgitb; cgitb.enable()
##чтобы ошибки передавались в log файл:чтобы ошибки передавались в log файл: import cgitb; cgitb.enable(display=0, logdir="/tmp")import cgitb; cgitb.enable(display=0, logdir="/tmp")
Модуль предоставляет средства Модуль предоставляет средства для ведения log-файла:для ведения log-файла:
LogfileLogfile - - определяет имя log-файла. определяет имя log-файла.
LogfpLogfp - - файловый объект, файловый объект, соответствующий log-файлу.соответствующий log-файлу.
log()log() - - записывает строку в log-файлзаписывает строку в log-файл
Класс Класс FieldStorageFieldStorage - содержит в себе - содержит в себе переданную в форме информацию. Этот класс переданную в форме информацию. Этот класс представляет из себя словарь. представляет из себя словарь.
Чтобы Чтобы FieldStorageFieldStorage включал все переменные включал все переменные формы:формы:
form = cgi.FieldStorage(keep_blank_values=true)form = cgi.FieldStorage(keep_blank_values=true)
пример CGI-программы, который проверяет, чтобы были пример CGI-программы, который проверяет, чтобы были
заполнены поля ‘name’ и ‘addr’:заполнены поля ‘name’ и ‘addr’: import cgi
print """\ Content-Type: text/html
<html> <body>"""
form = cgi.FieldStorage() if form.has_key("name") and form.has_key("addr"): print """\ <p>eIN: %s</p> <p>aAOAO: %s</p>""" else: print """\ <h1>Ошибка</h1> <p>Введите, пожалуйста, имя и адрес.</p>""" print """\ </body> </html>"""
Если возможноЕсли возможно присутствие нескольких полей с присутствие нескольких полей с одинаковым именем, используйте встроенную функцию одинаковым именем, используйте встроенную функцию
type()type() для определения типа: для определения типа:
value = form.getvalue("username", "") if type(value) is type([]): # Заполнено несколько полей с именем
пользователя usernames = ",".join(value) else: # Заполнено не более одного поля с
именем пользователя usernames = value
Если объект представляет загружаемый файл, при обращении к атрибуту value весь файл считывается в память в виде строки. Можно определить, представляет ли объект загружаемый файл,
по значению атрибута filename или file:
fileitem = form["userfile"] if fileitem.file: # Объект fileitem представляет загружаемый
файл. # Подсчитываем строки, не сохраняя весь
файл в памяти. linecount = 0 while 1: if fileitem.file.readline(): linecount += 1 else: break
Дополнительные возможности модуляДополнительные возможности модуля cgicgi
test()test() - - реализует готовую CGI-реализует готовую CGI-программу, предназначена для программу, предназначена для тестирования: выводит тестирования: выводит минимальный HTTP-заголовок и всю минимальный HTTP-заголовок и всю переданную программе информацию переданную программе информацию в формате HTML. в формате HTML.
FastCGIFastCGI По сравнению с CGI является более производительным По сравнению с CGI является более производительным
и безопасным.и безопасным.
FastCGI ликвидирует множество ограничений CGI-FastCGI ликвидирует множество ограничений CGI-программ. Проблема CGI-программ в том, что они программ. Проблема CGI-программ в том, что они должны быть перезапущены веб-сервером при каждом должны быть перезапущены веб-сервером при каждом запросе, что приводит к понижению запросе, что приводит к понижению производительности.производительности.
FastCGI убирает это ограничение, сохраняя процесс FastCGI убирает это ограничение, сохраняя процесс запущенным и передавая запросы этому постоянно запущенным и передавая запросы этому постоянно запущенному процессу. Это позволяет не тратить запущенному процессу. Это позволяет не тратить время на запуск новых процессов.время на запуск новых процессов.
Объекты, реализующие чтение ресурса, помимо read(), Объекты, реализующие чтение ресурса, помимо read(), readline(), readlines(), fileno() и close() имеют методы:readline(), readlines(), fileno() и close() имеют методы:
info()info() - - при использовании протокола при использовании протокола HTTP этот объект содержит HTTP этот объект содержит информацию обо всех заголовках. информацию обо всех заголовках.
geturl()geturl() - - возвращает истинный URL возвращает истинный URL ресурса. ресурса.
Функции Функции urlopen()urlopen() и и urlretrieve()urlretrieve() создают и создают и
используют экземпляр класса используют экземпляр класса FancyURLopener. Созданный объект FancyURLopener. Созданный объект сохраняется для дальнейшего сохраняется для дальнейшего использования этими функциями. Если использования этими функциями. Если нужен более тонкий контроль, используются:нужен более тонкий контроль, используются:
URLopenerURLopener()() - базовый класс, реализующий - базовый класс, реализующий чтение ресурсов. чтение ресурсов.
FancyURLopenerFancyURLopener()() - предоставляет обработку - предоставляет обработку HTTPHTTP-ответов-ответов
importimport urllib urllib
class class AppURLopenerAppURLopener(urllib.FancyURLopener):(urllib.FancyURLopener): version = version = "App/1.7""App/1.7"
urllib._urlopener = AppURLopener()urllib._urlopener = AppURLopener()
Следующий пример использует метод Следующий пример использует метод GETGET для для загрузки ресурса по протоколу HTTP:загрузки ресурса по протоколу HTTP:
importimport urllib urllibparams = urllib.urlencode({params = urllib.urlencode({'spam''spam': : 11, , \\
'eggs''eggs': : 22, , \\
'bacon''bacon': : 00})})
f = urllib.urlopen(f = urllib.urlopen("http://www.musi-"http://www.musi-cal.com/cgi-bin/query?%s"cal.com/cgi-bin/query?%s" % params) % params)
printprint f.read f.read()()
И тот же самый ресурс, используя метод И тот же самый ресурс, используя метод POSTPOST::
importimport urllib urllibparams = urllib.urlencode({params = urllib.urlencode({'spam''spam': : 11, \, \ 'eggs''eggs': : 22, \, \ 'bacon''bacon': : 00})}) f = urllib.urlopen(f = urllib.urlopen("http://www.musi-"http://www.musi-
cal.com/cgi-bin/query"cal.com/cgi-bin/query", params), params)printprint f.read() f.read()
importimport urllib urllib
params = urllib.urlencode({params = urllib.urlencode({'text': 'elephant and giraf''text': 'elephant and giraf'})}) printprint params params f = urllib.urlopenf = urllib.urlopen(("http://yandex.ru/yandsearch?" "http://yandex.ru/yandsearch?" + params+ params)) printprint f.geturl() f.geturl()
##text=elephant+and+giraftext=elephant+and+giraf##http://yandex.ru/yandsearch?text=elephant+and+giraf&lr=2http://yandex.ru/yandsearch?text=elephant+and+giraf&lr=2
printprint f.read() f.read() # #выведет код страницывыведет код страницы
urlparse — urlparse — операцииоперации наднад URL URL
Этот модуль определяет средства для Этот модуль определяет средства для разбиения URL на компоненты, разбиения URL на компоненты, конструирования URL из компонент и конструирования URL из компонент и преобразования относительных URL в преобразования относительных URL в абсолютные.абсолютные.
urlparse()urlparse() - - возвращает кортеж из шести возвращает кортеж из шести
строк: идентификатор протокола, строк: идентификатор протокола, положение в сети, путь, параметры, строка положение в сети, путь, параметры, строка запроса и идентификатор фрагмента. запроса и идентификатор фрагмента.
То есть применение функции к строке То есть применение функции к строке общего вида: общего вида: ’scheme://netloc/path;parameters?’scheme://netloc/path;parameters?query#fragment’query#fragment’ дает: дает:
‘‘(scheme, netloc, path, parameters, query, (scheme, netloc, path, parameters, query, fragment)’.fragment)’.
>>> import urlparse
>>> urlparse.urlparse(
... 'http://www.cwi.nl:80/%7Eguido/Python.html')
ParseResult(scheme='http', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html', params='', query='', fragment='')
urlunparse()urlunparse() - - восстанавливает и восстанавливает и
возвращает URL из компонент, возвращает URL из компонент, переданных в кортеже. переданных в кортеже.
urljoin()urljoin() Конструирует и возвращает Конструирует и возвращает полный URL, комбинируя базовый URL и полный URL, комбинируя базовый URL и относительный URLотносительный URL
importimport urlparse urlparse
urlparse.urljoin('http://www.cwi.nl/%7Eguido/urlparse.urljoin('http://www.cwi.nl/%7Eguido/
… … Python.html','FAQ.html')Python.html','FAQ.html')
'http://www.cwi.nl/%7Eguido/FAQ.html''http://www.cwi.nl/%7Eguido/FAQ.html'