Поддержка протоколов internet

28
Поддержка протоколов Поддержка протоколов Internet Internet c c gi gi - протокол CGI используемый для - протокол CGI используемый для интерпретации форм HTML на стороне интерпретации форм HTML на стороне сервера. сервера. FastCGI FastCGI - - протокол взаимодействия протокол взаимодействия вебсервера и приложения, дальнейшее вебсервера и приложения, дальнейшее развитие технологии развитие технологии CGI CGI . . u u rllib rllib - чтение произвольных - чтение произвольных ресурсов по URL. ресурсов по URL. u u rlparse rlparse - операции над URL. - операции над URL.

Upload: sydnee-woodward

Post on 02-Jan-2016

38 views

Category:

Documents


0 download

DESCRIPTION

Поддержка протоколов Internet. c gi - протокол CGI используемый для интерпретации форм HTML на стороне сервера. FastCGI - протокол взаимодействия вебсервера и приложения, дальнейшее развитие технологии  CGI . u rllib - чтение произвольных ресурсов по URL. u rlparse - операции над URL. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Поддержка протоколов Internet

Поддержка протоколов Поддержка протоколов InternetInternet

ccgigi - протокол CGI используемый для - протокол CGI используемый для интерпретации форм HTML на стороне сервера. интерпретации форм HTML на стороне сервера.

FastCGIFastCGI - - протокол взаимодействия протокол взаимодействия вебсервера и приложения, дальнейшее вебсервера и приложения, дальнейшее развитие технологии развитие технологии CGICGI. .

uurllibrllib - чтение произвольных ресурсов по URL. - чтение произвольных ресурсов по URL.

uurlparserlparse - операции над URL. - операции над URL.

Page 2: Поддержка протоколов Internet

ccgigi - протокол CGI - протокол CGI

CGI-программаCGI-программа вызывается HTTP- вызывается HTTP-сервером, обычно для обработки сервером, обычно для обработки данных. HTTP-сервер помещает данных. HTTP-сервер помещает информацию о запросе в переменные информацию о запросе в переменные окружения программы, выполняет окружения программы, выполняет программу и пересылает клиенту его программу и пересылает клиенту его вывод. вывод.

Page 3: Поддержка протоколов Internet

HTTPHTTP - - протокол передачи гипертекста.  протокол передачи гипертекста. Обмен сообщениями идёт по Обмен сообщениями идёт по обыкновенной схеме «запрос-ответ». обыкновенной схеме «запрос-ответ». Для идентификации ресурсов HTTP Для идентификации ресурсов HTTP использует глобальные использует глобальные URL.URL.

Page 4: Поддержка протоколов Internet

Всё программное обеспечение для работы с протоколом Всё программное обеспечение для работы с протоколом

HTTP разделяется на три больших категории:HTTP разделяется на три больших категории: СерверыСерверы как основные поставщики  как основные поставщики

услуг хранения и обработки услуг хранения и обработки информации (обработка запросов).информации (обработка запросов).

КлиентыКлиенты — конечные потребители  — конечные потребители услуг сервера (отправка запроса).услуг сервера (отправка запроса).

ПроксиПрокси для выполнения транспортных  для выполнения транспортных служб.служб.

Page 5: Поддержка протоколов Internet

TCP/IPTCP/IP Стек протоколов TCP/IPСтек протоколов TCP/IP  — набор сетевых   — набор сетевых

протоколов разных уровней, используемых в протоколов разных уровней, используемых в сетях. Протоколы работают друг с другом сетях. Протоколы работают друг с другом в стекев стеке..  

Уровни стека TCP/IP:Уровни стека TCP/IP: ПрикладнойПрикладной ( (HTTP)HTTP) ПредставительскийПредставительский СеансовыйСеансовый ТранспортныйТранспортный (TCP)(TCP) СетевойСетевой (IP)(IP) КанальныйКанальный ФизическийФизический

Page 6: Поддержка протоколов Internet

Для передачи переменных используется два Для передачи переменных используется два 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

Page 7: Поддержка протоколов Internet

Вывод 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>"

Page 8: Поддержка протоколов Internet

основная область применения CGI – для основная область применения CGI – для

обработки информации из формобработки информации из форм.. передача параметров в CGI скрипт передача параметров в CGI скрипт

осуществляется двумя методами: осуществляется двумя методами:

прямой передачей параметров в имени URL в прямой передачей параметров в имени URL в формате “формате “http://http://адрес_скрипта?адрес_скрипта?имя_параметра1=значение_параметра1&имяимя_параметра1=значение_параметра1&имя_параметра2=значение2..._параметра2=значение2...””

передача параметров через HTML форму.  передача параметров через HTML форму. 

Page 9: Поддержка протоколов Internet

во втором случае необходимо во втором случае необходимо применение модуля применение модуля 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")

Page 10: Поддержка протоколов Internet

Модуль предоставляет средства Модуль предоставляет средства для ведения log-файла:для ведения log-файла:

LogfileLogfile - - определяет имя log-файла. определяет имя log-файла.

LogfpLogfp - - файловый объект, файловый объект, соответствующий log-файлу.соответствующий log-файлу.

log()log() - - записывает строку в log-файлзаписывает строку в log-файл

Page 11: Поддержка протоколов Internet

Класс Класс FieldStorageFieldStorage - содержит в себе - содержит в себе переданную в форме информацию. Этот класс переданную в форме информацию. Этот класс представляет из себя словарь. представляет из себя словарь.

Чтобы Чтобы FieldStorageFieldStorage включал все переменные включал все переменные формы:формы:

form = cgi.FieldStorage(keep_blank_values=true)form = cgi.FieldStorage(keep_blank_values=true)

Page 12: Поддержка протоколов Internet

пример 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>"""

Page 13: Поддержка протоколов Internet

Если возможноЕсли возможно присутствие нескольких полей с присутствие нескольких полей с одинаковым именем, используйте встроенную функцию одинаковым именем, используйте встроенную функцию

type()type() для определения типа: для определения типа:

value = form.getvalue("username", "") if type(value) is type([]): # Заполнено несколько полей с именем

пользователя usernames = ",".join(value) else: # Заполнено не более одного поля с

именем пользователя usernames = value

Page 14: Поддержка протоколов Internet

Если объект представляет загружаемый файл, при обращении к атрибуту value весь файл считывается в память в виде строки. Можно определить, представляет ли объект загружаемый файл,

по значению атрибута filename или file:

fileitem = form["userfile"] if fileitem.file: # Объект fileitem представляет загружаемый

файл. # Подсчитываем строки, не сохраняя весь

файл в памяти. linecount = 0 while 1: if fileitem.file.readline(): linecount += 1 else: break

Page 15: Поддержка протоколов Internet

Дополнительные возможности модуляДополнительные возможности модуля cgicgi

test()test() - - реализует готовую CGI-реализует готовую CGI-программу, предназначена для программу, предназначена для тестирования: выводит тестирования: выводит минимальный HTTP-заголовок и всю минимальный HTTP-заголовок и всю переданную программе информацию переданную программе информацию в формате HTML. в формате HTML.

Page 16: Поддержка протоколов Internet

FastCGIFastCGI По сравнению с CGI является более производительным По сравнению с CGI является более производительным

и безопасным.и безопасным.

FastCGI ликвидирует множество ограничений CGI-FastCGI ликвидирует множество ограничений CGI-программ. Проблема CGI-программ в том, что они программ. Проблема CGI-программ в том, что они должны быть перезапущены веб-сервером при каждом должны быть перезапущены веб-сервером при каждом запросе, что приводит к понижению запросе, что приводит к понижению производительности.производительности.

FastCGI убирает это ограничение, сохраняя процесс FastCGI убирает это ограничение, сохраняя процесс запущенным и передавая запросы этому постоянно запущенным и передавая запросы этому постоянно запущенному процессу. Это позволяет не тратить запущенному процессу. Это позволяет не тратить время на запуск новых процессов.время на запуск новых процессов.

Page 17: Поддержка протоколов Internet
Page 18: Поддержка протоколов Internet

Объекты, реализующие чтение ресурса, помимо read(), Объекты, реализующие чтение ресурса, помимо read(), readline(), readlines(), fileno() и close() имеют методы:readline(), readlines(), fileno() и close() имеют методы:

info()info() - - при использовании протокола при использовании протокола HTTP этот объект содержит HTTP этот объект содержит информацию обо всех заголовках. информацию обо всех заголовках.

geturl()geturl() - - возвращает истинный URL возвращает истинный URL ресурса. ресурса.

Page 19: Поддержка протоколов Internet

Функции Функции urlopen()urlopen() и и urlretrieve()urlretrieve() создают и создают и

используют экземпляр класса используют экземпляр класса FancyURLopener. Созданный объект FancyURLopener. Созданный объект сохраняется для дальнейшего сохраняется для дальнейшего использования этими функциями. Если использования этими функциями. Если нужен более тонкий контроль, используются:нужен более тонкий контроль, используются:

URLopenerURLopener()() - базовый класс, реализующий - базовый класс, реализующий чтение ресурсов. чтение ресурсов.

FancyURLopenerFancyURLopener()() - предоставляет обработку - предоставляет обработку HTTPHTTP-ответов-ответов

Page 20: Поддержка протоколов Internet

importimport urllib urllib

class class AppURLopenerAppURLopener(urllib.FancyURLopener):(urllib.FancyURLopener): version = version = "App/1.7""App/1.7"

urllib._urlopener = AppURLopener()urllib._urlopener = AppURLopener()

Page 21: Поддержка протоколов Internet

Следующий пример использует метод Следующий пример использует метод 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()()

Page 22: Поддержка протоколов Internet

И тот же самый ресурс, используя метод И тот же самый ресурс, используя метод 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()

Page 23: Поддержка протоколов Internet

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() # #выведет код страницывыведет код страницы

Page 24: Поддержка протоколов Internet

urlparse — urlparse — операцииоперации наднад URL URL

Этот модуль определяет средства для Этот модуль определяет средства для разбиения URL на компоненты, разбиения URL на компоненты, конструирования URL из компонент и конструирования URL из компонент и преобразования относительных URL в преобразования относительных URL в абсолютные.абсолютные.

Page 25: Поддержка протоколов Internet

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)’.

Page 26: Поддержка протоколов Internet

>>> 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='')

Page 27: Поддержка протоколов Internet

urlunparse()urlunparse() - - восстанавливает и восстанавливает и

возвращает URL из компонент, возвращает URL из компонент, переданных в кортеже. переданных в кортеже.

urljoin()urljoin() Конструирует и возвращает Конструирует и возвращает полный URL, комбинируя базовый URL и полный URL, комбинируя базовый URL и относительный URLотносительный URL

Page 28: Поддержка протоколов Internet

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'