Кратко о том, что и как в инете, и причем здесь Питон.
Интернет — всемирная система объединённых компьютерных сетей, построенная на использовании протокола IP и маршрутизации пакетов данных. Интернет образует глобальное информационное пространство, служит физической основой для Всемирной паутины и множества других систем (протоколов) передачи данных.
Всемирная паутина — распределенная система, предоставляющая доступ к связанным между собой документам, расположенным на различных компьютерах, подключенных к Интернету. Всемирную паутину образуют миллионы web-серверов.
Большинство ресурсов всемирной паутины представляет собой гипертекст. Гипертекстовые документы, размещаемые во всемирной паутине, называются web-страницами. Для загрузки и просмотра web-страниц используются специальные программы — браузеры.
Для облегчения создания, хранения и отображения гипертекста во Всемирной паутине традиционно используется язык HTML (англ. HyperText Markup Language), язык разметки гипертекста. После того, как HTML-файл становится доступен веб-серверу, его начинают называть «веб-страницей». В целом, Всемирная паутина стоит на «трёх китах»: HTTP, HTML и URL.
Семантическая паутина — это направление развития Всемирной паутины, целью которого является представление информации в виде, пригодном для машинной обработки. Семантическая паутина работает параллельно с обычной Паутиной и на её основе, используя протокол HTTP и идентификаторы ресурсов URI.
URI (англ. Uniform Resource Identifier) — унифицированный (единообразный) идентификатор ресурса. URI — это последовательность символов, идентифицирующая абстрактный или физический ресурс. Структура URI очень гибка, синтаксис не сложен. В базовом виде URI представляется как: : Самый известный пример URI — это URL. http://ru.wikipedia.org/wiki/%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D0%BA%D1%80%D0%
Интернет состоит из многих тысяч корпоративных, научных, правительственных и домашних компьютерных сетей. Объединение сетей разной архитектуры и топологии стало возможно благодаря протоколу IP (англ. Internet Protocol) и принципу маршрутизации пакетов данных.
Протокол IP используется для негарантированной доставки данных, разделяемых на так называемые пакеты от одного узла сети к другому. IP-пакет — форматированный блок информации, передаваемый по вычислительной сети. Соединения вычислительных сетей, которые не поддерживают пакеты, такие как традиционные соединения типа «точка-точка» в телекоммуникациях, просто передают данные в виде последовательности байтов, символов или битов.
Transmission Control Protocol (TCP) — один из основных сетевых протоколов Интернета, предназначенный для управления передачей данных в сетях и подсетях TCP/IP. TCP — это транспортный механизм, предоставляющий поток данных, с предварительной установкой соединения, за счёт этого дающий уверенность в достоверности получаемых данных, осуществляет повторный запрос данных в случае потери данных и устраняет дублирование при получении двух копий одного пакета.
Сетевой протокол — набор правил, позволяющий осуществлять соединение и обмен данными между двумя и более включёнными в сеть устройствами. Систему протоколов Интернет называют «стеком протоколов TCP/IP».
Протокол IP был специально создан агностическим в отношении физических каналов связи. На стыках сетей специальные маршрутизаторы (программные или аппаратные) занимаются автоматической сортировкой и перенаправлением пакетов данных, исходя из IP-адресов получателей этих пакетов.
Сетевая модель OSI (ЭМВОС) — абстрактная сетевая модель для коммуникаций и разработки сетевых протоколов. Предлагает взгляд на компьютерную сеть с точки зрения измерений. Каждое измерение обслуживает свою часть процесса взаимодействия. Модель OSI Тип данных Уровень Функции Данные 7. Прикладной уровень Доступ к сетевым службам 6. Уровень представления Представление и кодирование данных 5. Сеансовый уровень Управление сеансом связи Сегменты 4. Транспортный Прямая связь между конечными пунктами и надежность Пакеты 3. Сетевой Определение маршрута и логическая адресация Кадры 2. Канальный Физическая адресация Биты 1. Физический уровень Работа со средой передачи, сигналами и двоичными данными
Уровень OSI Протоколы, примерно соответствующие уровню OSI Прикладной BGP, DNS, FTP, HTTP, HTTPS, IMAP, LDAP, POP3, SNMP, SMTP, SSH, Telnet, XMPP (Jabber) Сеансовый/Представления SSL, TLS Транспортный TCP, UDP Сетевой EIGRP, ICMP, IGMP, IP, IS-IS, OSPF, RIP Канальный Arcnet, ATM, Ethernet, Frame relay, HDLC, PPP, L2TP, SLIP, Token ring
HTTP ( HyperText Transfer Protocol ) — протокол прикладного уровня передачи данных (изначально — в виде гипертекстовых документов).
Основой HTTP является технология «клиент-сервер». Предполагается существование: Потребителей (клиентов), которые инициируют соединение и посылают запрос. Поставщиков (серверов), которые ожидают соединения для получения запроса, производят необходимые действия и возвращают обратно сообщение с результатом.
Метод HTTP — последовательность из любых символов, кроме управляющих и разделителей, указывающая на основную операцию над ресурсом. Список методов: GET, HEAD, POST, PUT, PATCH, DELETE, TRACE, LINK, UNLINK, CONNECT, OPTIONS.
GET - используется для запроса содержимого указанного ресурса. С помощью метода GET можно также начать какой-либо процесс. HEAD - Аналогичен методу GET, за исключением того, что в ответе сервера отсутствует тело. POST - Применяется для передачи пользовательских данных заданному ресурсу.
Этот модуль определяет классы, реализующие HTTP и HTTPS протоколы. Обычно он не используется непосредственно, его классы и методы использует библиотека urllib для обработки URL адресов, которые используют HTTP и HTTPS.
class httplib.HTTPSConnection(…) class httplib.HTTPResponse(…) class httplib.HTTPMessage (Provides utility functions to deal with HTTP Headers.) Также в этом модуле много объектов класса Exception.
class httplib.HTTPConnection(host[, port[, strict[, timeout[, source_address]]]]) (предоставляет один сеанс с HTTP сервером.) h3 = httplib.HTTPConnection('www.google.ru', 80) h3 = httplib.HTTPConnection('www.google.ru’, 80, timeout=10)
HTTPConnection.request(method, url[, body[, headers]]) request(…) отправляет запрос серверу используя HTTP метод method и селектор url. HTTPConnection.getresponse() вызывается после request(…) для получения ответа от сервера. Возвращает объект класса HTTPResponse HTTPConnection.close() прекращает связь с сервером.
class httplib.HTTPResponse(sock[, debuglevel=0][, strict=0]) Объект - то, что возвращается после успешного соединения. Не инициализируется пользователем. HTTPResponse.getheaders() Возвращает список из пар (header, value). Этот список дает информацию о сайте и сервере. Пример программы с использованием httlib: import httplib conn = httplib.HTTPConnection("www.python.org") conn.request("GET", "/index.html") j = conn.getresponse() print j.getheaders()
Этот модуль предоставляет средства высокого уровня для чтения сетевых ресурсов, используя различные протоколы.
Определенные в этом модуле средства позволяют обращаться к ресурсам через proxy- сервер, не требующий аутентификации. Аутентификация— проверка принадлежности субъекту доступа предъявленного им идентификатора; подтверждение подлинности. (Не путать с авторизацией и идентификацией)
Стоит отметить, что при работе с WWW используется в основном протокол HTTP, однако WWW охватывает не только HTTP, но и многие другие протоколы (FTP, gopher, HTTPS и т.п.).
urlopen(url [, data]) Создает и возвращает объект, реализующий чтение ресурса url. Использует HTTP метод GET по умолчанию. Чтобы использовался метод POST необходимо указать строку data с данными в формате ‘application/x-www-form-urlencoded’.
urlencode(dict) dict – словарь. Возвращает строку с данными dict в формате ‘application/x-www-form-urlencoded’. Возвращаемая строка состоит из фрагментов ‘key=value’, разделенных ‘&’, где key и value преобразуются с помощью функции quote_plus(). quote_plus(string [, safe]) – заменяет спец. Символы в строке string на последовательности вида ‘%xx’ Преобразованию не подвергаются буквы, цифры и символы ‘_’ , ‘,’ , ‘.’ и ‘-’. Пробелы заменяются на ‘+’. Если + в строке safe, то заменяет на ‘%2b’.
read(), readline(), readlines(), fileno() и close() реализуют чтение ресурса. info() возвращает информацию о ресурсе. geturl() возвращает истинную информацию о ресурсе. Пример: 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() #выведет код страницы.
Этот модуль определяет средства для разбиения Url на компоненты, конструирования URL из компонент и преобразования относительных URL в абсолютные (RFC 1808).
urlparse(urlstring [, default_scheme [, allow_fragments]]) Разбивает URL на части, и возвращает tuple из 6 элементов. Идентификатор протокола, положение в сети, путь, параметры, строка запроса и идентификатор фрагмента. ’scheme://netloc/path;parameters?query#fragment’ выдает ‘(scheme, netloc, path, parameters, query, fragment)’.
urlunparse(tuple) Восстанавливает по tuple url адрес. urljoin(base, rel_url [, allow_fragments]) Конструирует и возвращает полный url адрес.
Всё программное обеспечение для работы с протоколом HTTP разделяется на три больших категории: Серверы как основные поставщики услуг хранения и обработки информации (обработка запросов). Клиенты — конечные потребители услуг сервера (отправка запроса). Прокси для выполнения транспортных служб.
Прокси-сервер — служба в компьютерных сетях, позволяющая клиентам выполнять косвенные запросы к другим сетевым службам.
Сначала клиент подключается к прокси-серверу и запрашивает какой-либо ресурс (например, e-mail), расположенный на другом сервере. Затем прокси-сервер либо подключается к указанному серверу и получает ресурс у него, либо возвращает ресурс из собственного кэша (в случаях, если прокси имеет свой кэш).
Прозрачный прокси — схема связи, при которой трафик, или его часть, перенаправляется на прокси-сервер неявно (средствами маршрутизатора). Обратный прокси — прокси-сервер, который в отличие от прямого, ретранслирует запросы клиентов из внешней сети на один или несколько серверов, логически расположенных во внутренней сети.
import urllib2 uri = "http://www.python.org" http_proxy_server = "someproxyserver.com" http_proxy_port = "3128" http_proxy_realm = http_proxy_server # Worked in his (limited) testing environment. http_proxy_user = "username" http_proxy_passwd = "password" # Next line = "http://username:[email protected]:3128" http_proxy_full_auth_string = "http://%s:%s@%s:%s" % (http_proxy_user, http_proxy_passwd, http_proxy_server, http_proxy_port) def open_url_no_proxy(): urllib2.urlopen(uri) print "Apparent success without proxy server!" def open_url_installed_opener(): proxy_handler = urllib2.ProxyHandler({"http":http_proxy_full_auth_string}) opener = urllib2.build_opener(proxy_handler) urllib2.install_opener(opener) urllib2.urlopen(uri) print "Apparent success through proxy server!“ if __name__ == "__main__": open_url_no_proxy() open_url_installed_opener() Example for using urllib2.urlopen() with a proxy server requiring authentication
CGI- программа вызывается HTTP-сервером, обычно для обработки данных, переданных пользователем через элементы ‘FORM’ и ‘ISINDEX’ языка HTML.
Модуль cgi берет на себя заботу обо всех возможных способах передачи данных и предоставляет их программе через простой интерфейс.
FieldStorage([**keyword_args]) При инициализации его без аргументов происходит обработка данных со стандартного потока ввода и /или из переменных окружения в соответствии со стандартом CGI.()
Конструктор класса принимает след. Аргументы: fp – альтернативный файловый объект Headers – отобр- е ин. о HTTP заголовках и т.д. И для остальных сущ. значение по умолчанию.
Атрибуты класса FieldStorage name filename Value file type Headers и др.
import cgi print """\ Content-Type: text/html """ form = cgi.FieldStorage() if form.has_key("name") and form.has_key("addr"): print """\ Имя: %s Адрес: %s""" else: print """\ Ошибка Введите пожалуйста имя и адрес""" print """\ """
Куки — небольшой фрагмент данных, созданный веб-сервером или веб-страницей и хранимый на компьютере пользователя в виде файла, который веб-клиент (обычно веб-браузер) каждый раз пересылает веб-серверу в HTTP-запросе при попытке открыть страницу соответствующего сайта
В техническом плане куки представляют собой фрагменты данных, изначально отправляемых веб-сервером браузеру. При каждом последующем посещении сайта браузер пересылает их обратно серверу.
Установка куки Запрашивая страницу, браузер отправляет веб-серверу короткий текст с HTTP-запросом. Например, для доступа к странице http://www.example.org/index.html, браузер отправляет на сервер www.example.org следующий запрос: GET /index.html HTTP/1.1 Host: www.example.org браузер → сервер
Сервер отвечает HTTP/1.1 200 OK Content-type: text/html Set-Cookie: name=value (содержимое страницы) браузер ← сервер
GET /spec.html HTTP/1.1 Host: www.example.org Cookie: name=value Accept: */* браузер → сервер
import http.cookiejar, urllib.request cj = http.cookiejar.CookieJar() opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj)) r = opener.open("http://example.com/")
I am just asking…