Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 [ 116 ] 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145

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

unquote plus( string)

Работает аналогично функции unquote(), но также заменяет символы + пробелами, как это необходимо для восстановления значений полей форм.

urlencode(dict)

Возвращает строку с данными dict (отображение строк-имен переменных к строкам-значениям) в формате application/x-www-form-urlencoded . Результат может быть использован в качестве аргумента data функций urlopen() и urlretrieve() и метода open() экземпляров URLopener и производных от него классов. Эта функция полезна для преобразования значений полей формы в строку запроса. Возвращаемая строка состоит из последовательности фрагментов вида key=value для каждой записи в словаре, разделенных символом где key и value обрабатываются с помощью функции quote plus().

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

info()

Возвращает экземпляр класса mimetools.Message, содержащий метаинформа-цию о ресурсе. При использовании протокола HTTP этот объект содержит информацию обо всех заголовках. При использовании протокола FTP заголовок Content-Length будет присутствовать, если сервер посылает информацию о длине файла. При обращении к локальному файлу возвращаемый этим методом объект будет содержать заголовок Date с датой и временем последнего изменения, заголовок Content-Length с размером файла и заголовок Content-Type с предполагаемым типом файла.

geturl()

Возвращает истинный URL ресурса. В некоторых случаях HTTP-сервер перенаправляет клиента на другой URL. Такие перенаправления автоматически обрабатываются, и Вы получаете ресурс с новым URL, узнать который можно с помощью этого метода.

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

URLopener ([proxies [, **x509]])

Базовый класс, реализующий чтение ресурсов. Если Вам не нужна поддержка каких-либо дополнительных протоколов - используйте класс FancyURLopener. Если задан и не равен None аргумент proxies, он должен быть отображением идентификаторов протоколов (scheme identifier) к URL соответствующих proxy-серверов и будет использован для определения способа соединения. По умолчанию URL proxy-серверов определяются по схеме, описанной в начале раздела.



Для аутентификации при использовании протокола HTTPS должны быть указаны именованные аргументы (x509) key file и cert file.

FancyURLopener ([proxies [, **x509]])

Этот класс является производным от класса URLopener и предоставляет обработку HTTP-ответов с кодами 301, 302 и 401. При получении ответов с кодами 301 и 302 используется заголовок Location для переадресации на другой URL. Для ответов с кодом 401 используется базовая аутентификация. Аргументы конструктора этого класса имеют такое же значение, как и для конструктора класса URLopener.

Экземпляры классов URLopener и FancyURLopener имеют следующие методы и атрибуты данных:

open( url [, data])

Открывает ресурс url и возвращает объект, аналогичный файловому, реализующий чтение ресурса (см. выше). Этот метод проверяет кэш, обрабатывает информацию о proxy-сервере и вызывает один из методов open scheme (), где scheme заменяется идентификатором протокола (в котором символы - заменены на ), или метод open unknown() , если используемый идентификатор протокола неизвестен. Аргумент data имеет такое же значение, как и для функции urlopen() .

open unknown( url [, data])

Этот метод может быть переопределен в производном классе для обработки URL с неизвестным идентификатором протокола. Исходная реализация генерирует исключение IOError.

retrieve( url [, filename [, reporthook [, data]]])

Копирует ресурс url в локальный файл. Если URL указывает на локальный файл или кэш уже содержит свежую копию ресурса, копирование не производится. Метод возвращает кортеж вида ( filename, headers) , где filename - имя локального файла с копией ресурса и headers - None, если url ссылается на локальный файл, иначе - объект, возвращаемый методом info() объекта, реализующего чтение ресурса (см. выше).

Аргумент filename указывает имя локального файла, в который будет производиться копирование. По умолчанию имя файла генерируется с помощью функции tempfile.mktempO. Задав аргумент reporthook Вы можете отслеживать процесс копирования. Функция (или другой объект, поддерживающий вызов) reporthook вызывается при установлении сетевого соединения и после загрузки каждого блока ресурса с тремя аргументами: число загруженных блоков, размер блока в байтах и размер файла (-1, если размер неизвестен). Аргумент data имеет такое же значение, как и для функции urlopen() .

version

Этот атрибут класса является строкой с именем программы клиента, которое будет использовано при конструировании HTTP-запросов. По умолчанию используется строка Python-urllib/urllib ver, где urllib ver - версия модуля



27.3. urlparse - операции над URL 367

urllib. Вы можете переопределить атрибут version в определении производного класса, чтобы изменить имя программы, посылаемое серверу.

Для совместимости с предыдущими версиями, если URL без идентификатора протокола (scheme identifier) не соответствует существующему локальному файлу, производится попытка использовать его для FTP протокола. Это может привести к сбивающим с толку сообщениям об ошибках.

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

Следующий пример использует метод GET для загрузки ресурса по протоколу

HTTP:

>>> 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.readO

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

27.3 urlparse - операции над URL

Этот модуль определяет средства для разбиения URL (Uniform Resource Locator, единообразный указатель ресурса, RFC 1738) на компоненты, конструирования URL из компонент и преобразования относительных URL в абсолютные (RFC 1808).

urlparse (urlstring [, default scheme [, allow fragments]])

Разбивает URL на компоненты и возвращает кортеж из шести строк: идентификатор протокола (scheme identifier), положение в сети, путь, параметры, строка



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 [ 116 ] 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145