1 / 28

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

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

Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Поддержка протоколов Internet cgi - протокол CGI используемый для интерпретации форм HTML на стороне сервера. FastCGI - протокол взаимодействия вебсервера и приложения, дальнейшее развитие технологии CGI. urllib - чтение произвольных ресурсов по URL. urlparse - операции над URL.

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

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

  4. Всё программное обеспечение для работы с протоколом HTTP разделяется на три больших категории: • Серверы как основные поставщики услуг хранения и обработки информации (обработка запросов). • Клиенты — конечные потребители услуг сервера (отправка запроса). • Прокси для выполнения транспортных служб.

  5. TCP/IP • Стек протоколов TCP/IP  — набор сетевых протоколов разных уровней, используемых в сетях. Протоколы работают друг с другом в стеке. • Уровни стека TCP/IP: • Прикладной (HTTP) • Представительский • Сеансовый • Транспортный(TCP) • Сетевой(IP) • Канальный • Физический

  6. Для передачи переменных используется два HTTP метода: GET и POST • Метод GET отправляет скрипту всю собранную информацию формы как часть URL:http://www.komtet.ru/script.php?login=admin&name=komtet • Метод POST передает данные таким образом, что пользователь сайта уже не видит передаваемые скрипту данные:http://www.komtet.ru/script.php

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

  8. основная область применения CGI – для обработки информации из форм. • передача параметров в CGI скрипт осуществляется двумя методами: • прямой передачей параметров в имени URL в формате “http://адрес_скрипта?имя_параметра1=значение_параметра1&имя_параметра2=значение2...” • передача параметров через HTML форму. 

  9. во втором случае необходимо применение модуля cgi: • import cgi #чтобы включить обработку ошибок : • import cgitb; cgitb.enable() #чтобы ошибки передавались в log файл: • import cgitb; cgitb.enable(display=0, logdir="/tmp")

  10. Модуль предоставляет средства для ведения log-файла: • Logfile - определяет имя log-файла. • Logfp - файловый объект, соответствующий log-файлу. • log() - записывает строку в log-файл

  11. Класс FieldStorage - содержит в себе переданную в форме информацию. Этот класс представляет из себя словарь. • Чтобы FieldStorage включал все переменные формы: • form = cgi.FieldStorage(keep_blank_values=true)

  12. пример CGI-программы, который проверяет, чтобы были заполнены поля ‘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>"""

  13. Если возможноприсутствие нескольких полей с одинаковым именем, используйте встроенную функцию type() для определения типа: • value = form.getvalue("username", "") • if type(value) is type([]): • # Заполнено несколько полей с именем пользователя • usernames = ",".join(value) • else: • # Заполнено не более одного поля с именем пользователя • usernames = value

  14. Если объект представляет загружаемый файл, при обращении к атрибуту value весь файл считывается в память в виде строки. Можно определить, представляет ли объект загружаемый файл, по значению атрибута filename или file: • fileitem = form["userfile"] • if fileitem.file: • # Объект fileitem представляет загружаемый файл. • # Подсчитываем строки, не сохраняя весь файл в памяти. • linecount = 0 • while 1: • if fileitem.file.readline(): • linecount += 1 • else: • break

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

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

  17. urllib — чтение произвольных ресурсов по URL

  18. Объекты, реализующие чтение ресурса, помимо read(), readline(), readlines(), fileno() и close() имеют методы: • info() - при использовании протокола HTTP этот объект содержит информацию обо всех заголовках. • geturl() - возвращает истинный URL ресурса.

  19. Функции urlopen() и urlretrieve() создают и используют экземпляр класса FancyURLopener. Созданный объект сохраняется для дальнейшего использования этими функциями. Если нужен более тонкий контроль, используются: • URLopener() - базовый класс, реализующий чтение ресурсов. • FancyURLopener() - предоставляет обработку HTTP-ответов

  20. import urllib • class AppURLopener(urllib.FancyURLopener): • version = "App/1.7" • urllib._urlopener = AppURLopener()

  21. Следующий пример использует метод GET для загрузки ресурса по протоколу HTTP: • import urllib • params = urllib.urlencode({'spam': 1, \ 'eggs': 2, \ 'bacon': 0}) • f = urllib.urlopen("http://www.musi-cal.com/cgi-bin/query?%s" % params) • print f.read()

  22. И тот же самый ресурс, используя метод POST: • import urllib • params = urllib.urlencode({'spam': 1, \ • 'eggs': 2, \ • 'bacon': 0}) • f = urllib.urlopen("http://www.musi-cal.com/cgi-bin/query", params) • print f.read()

  23. import urllib • params = urllib.urlencode({'text': 'elephant and giraf'}) • print params • f = urllib.urlopen("http://yandex.ru/yandsearch?" + params) • print f.geturl() #text=elephant+and+giraf #http://yandex.ru/yandsearch?text=elephant+and+giraf&lr=2 • print f.read() #выведет код страницы

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

  25. urlparse() - возвращает кортеж из шести строк: идентификатор протокола, положение в сети, путь, параметры, строка запроса и идентификатор фрагмента. • То есть применение функции к строке общего вида: ’scheme://netloc/path;parameters?query#fragment’ дает: ‘(scheme, netloc, path, parameters, query, fragment)’.

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

  27. urlunparse() - восстанавливает и возвращает URL из компонент, переданных в кортеже. • urljoin() Конструирует и возвращает полный URL, комбинируя базовый URL и относительный URL

  28. import urlparse urlparse.urljoin('http://www.cwi.nl/%7Eguido/ … Python.html','FAQ.html') 'http://www.cwi.nl/%7Eguido/FAQ.html'

More Related