urllib.parse
— Разбор URL на компоненты¶
Исходный код: Lib/urllib/parse.py.
Этот модуль определяет стандартный интерфейс для разбиения строки Uniform Resource Locator (URL) на компоненты (схема адресации, сетевое расположение, путь и т.д.), объединения компонентов обратно в строку URL, а также для преобразования «относительного URL» в абсолютный URL, заданный «базовым URL».
Модуль был разработан в соответствии с RFC интернета по относительным унифицированным локаторам ресурсов. Он поддерживает следующие схемы URL: file
, ftp
, gopher
, hdl
, http
, https
, imap
, mailto
, mms
, news
, nntp
, prospero
, rsync
, rtsp
, rtspu
, sftp
, shttp
, sip
, sips
, snews
, svn
, svn+ssh
, telnet
, wais
, ws
, wss
.
Модуль urllib.parse
определяет функции, которые делятся на две большие категории: Разбор URL и цитирование URL. Они подробно рассматриваются в следующих разделах.
Разбор URL-адресов¶
Функции разбора URL сосредоточены на разделении строки URL на ее компоненты или на объединении компонентов URL в строку URL.
-
urllib.parse.
urlparse
(urlstring, scheme='', allow_fragments=True)¶ Разбирает URL на шесть компонентов, возвращая 6 элементов named tuple. Это соответствует общей структуре URL:
scheme://netloc/path;parameters?query#fragment
. Каждый элемент кортежа - это строка, возможно, пустая. Компоненты не разбиваются на более мелкие части (например, местоположение сети - это одна строка), а символы % не расширяются. Разделители, как показано выше, не являются частью результата, за исключением ведущей косой черты в компоненте path, которая сохраняется, если присутствует. Например:>>> from urllib.parse import urlparse >>> urlparse("scheme://netloc/path;parameters?query#fragment") ParseResult(scheme='scheme', netloc='netloc', path='/path;parameters', params='', query='query', fragment='fragment') >>> o = urlparse("http://docs.python.org:80/3/library/urllib.parse.html?" ... "highlight=params#url-parsing") >>> o ParseResult(scheme='http', netloc='docs.python.org:80', path='/3/library/urllib.parse.html', params='', query='highlight=params', fragment='url-parsing') >>> o.scheme 'http' >>> o.netloc 'docs.python.org:80' >>> o.hostname 'docs.python.org' >>> o.port 80 >>> o._replace(fragment="").geturl() 'http://docs.python.org:80/3/library/urllib.parse.html?highlight=params'
Следуя спецификации синтаксиса в RFC 1808, urlparse распознает netloc, только если он правильно представлен „//“. В противном случае предполагается, что входные данные являются относительным URL и, следовательно, начинаются с компонента пути.
>>> from urllib.parse import urlparse >>> urlparse('//www.cwi.nl:80/%7Eguido/Python.html') ParseResult(scheme='', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html', params='', query='', fragment='') >>> urlparse('www.cwi.nl/%7Eguido/Python.html') ParseResult(scheme='', netloc='', path='www.cwi.nl/%7Eguido/Python.html', params='', query='', fragment='') >>> urlparse('help/Python.html') ParseResult(scheme='', netloc='', path='help/Python.html', params='', query='', fragment='')
Аргумент scheme задает схему адресации по умолчанию, которая будет использоваться только в том случае, если в URL не указана схема. Он должен быть того же типа (текст или байты), что и urlstring, за исключением того, что значение по умолчанию
''
всегда разрешено и автоматически преобразуется вb''
при необходимости.Если аргумент allow_fragments равен false, идентификаторы фрагментов не распознаются. Вместо этого они анализируются как часть пути, параметров или компонента запроса, а в возвращаемом значении
fragment
устанавливается пустая строка.Возвращаемым значением является named tuple, что означает, что к его элементам можно обращаться по индексу или как к именованным атрибутам, которыми являются:
Атрибут
Индекс
Значение
Значение, если отсутствует
scheme
0
Спецификатор схемы URL
параметр схема
netloc
1
Часть расположения сети
пустая строка
path
2
Иерархический путь
пустая строка
params
3
Больше не используется
всегда пустая строка
query
4
Компонент запроса
пустая строка
fragment
5
Идентификатор фрагмента
пустая строка
username
Имя пользователя
password
Пароль
hostname
Имя хоста (в нижнем регистре)
port
Номер порта в виде целого числа, если присутствует
Чтение атрибута
port
вызовет ошибкуValueError
, если в URL указан недопустимый порт. Дополнительную информацию об объекте result см. в разделе Результаты структурированного разбора.Несовпадение квадратных скобок в атрибуте
netloc
вызовет ошибкуValueError
.Символы в атрибуте
netloc
, которые разлагаются при нормализации NFKC (используемой кодировкой IDNA) на любой из/
,?
,#
,@
или:
, вызовут ошибкуValueError
. Если URL разложен перед разбором, то ошибка не возникнет.Как и в случае со всеми именованными кортежами, этот подкласс имеет несколько дополнительных методов и атрибутов, которые особенно полезны. Одним из таких методов является
_replace()
. Метод_replace()
возвращает новый объект ParseResult, заменяя указанные поля новыми значениями.>>> from urllib.parse import urlparse >>> u = urlparse('//www.cwi.nl:80/%7Eguido/Python.html') >>> u ParseResult(scheme='', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html', params='', query='', fragment='') >>> u._replace(scheme='http') ParseResult(scheme='http', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html', params='', query='', fragment='')
Изменено в версии 3.2: Добавлена возможность разбора URL-адресов IPv6.
Изменено в версии 3.3: Теперь фрагмент разбирается для всех схем URL (если allow_fragment не равно false), в соответствии с RFC 3986. Ранее существовал список схем, поддерживающих фрагменты.
Изменено в версии 3.6: Номера портов вне диапазона теперь поднимают
ValueError
, вместо того чтобы возвращатьNone
.Изменено в версии 3.8: Символы, влияющие на разбор netloc при нормализации NFKC, теперь будут поднимать
ValueError
.
-
urllib.parse.
parse_qs
(qs, keep_blank_values=False, strict_parsing=False, encoding='utf-8', errors='replace', max_num_fields=None, separator='&')¶ Разбор строки запроса, заданной в качестве строкового аргумента (данные типа application/x-www-form-urlencoded). Данные возвращаются в виде словаря. Ключами словаря являются уникальные имена переменных запроса, а значениями - списки значений для каждого имени.
Необязательный аргумент keep_blank_values - это флаг, указывающий, должны ли пустые значения в запросах с процентной кодировкой рассматриваться как пустые строки. Значение true указывает, что пустые значения должны быть сохранены как пустые строки. Значение по умолчанию false указывает на то, что пустые значения должны игнорироваться и рассматриваться так, как будто они не включены.
Необязательный аргумент strict_parsing - это флаг, указывающий, что делать с ошибками синтаксического анализа. Если false (по умолчанию), ошибки молча игнорируются. Если true, ошибки вызывают исключение
ValueError
.Необязательные параметры encoding и errors указывают, как декодировать закодированные в процентах последовательности в символы Unicode, принимаемые методом
bytes.decode()
.Необязательный аргумент max_num_fields - максимальное количество полей для чтения. Если задан, то выбрасывается ошибка
ValueError
, если прочитано больше, чем max_num_fields полей.Необязательный аргумент separator - это символ, который будет использоваться для разделения аргументов запроса. По умолчанию он принимает значение
&
.Используйте функцию
urllib.parse.urlencode()
(с параметромdoseq
, установленным вTrue
) для преобразования таких словарей в строки запроса.Изменено в версии 3.2: Добавьте параметры encoding и errors.
Изменено в версии 3.8: Добавлен параметр max_num_fields.
Изменено в версии 3.10: Добавлен параметр separator со значением по умолчанию
&
. Версии Python ранее Python 3.10 позволяли использовать как;
, так и&
в качестве разделителя параметров запроса. Это было изменено, чтобы разрешить только один ключ-разделитель, с&
в качестве разделителя по умолчанию.
-
urllib.parse.
parse_qsl
(qs, keep_blank_values=False, strict_parsing=False, encoding='utf-8', errors='replace', max_num_fields=None, separator='&')¶ Разбор строки запроса, заданной в качестве строкового аргумента (данные типа application/x-www-form-urlencoded). Данные возвращаются в виде списка пар имя-значение.
Необязательный аргумент keep_blank_values - это флаг, указывающий, должны ли пустые значения в запросах с процентной кодировкой рассматриваться как пустые строки. Значение true указывает, что пустые значения должны быть сохранены как пустые строки. Значение по умолчанию false указывает на то, что пустые значения должны игнорироваться и рассматриваться так, как будто они не включены.
Необязательный аргумент strict_parsing - это флаг, указывающий, что делать с ошибками синтаксического анализа. Если false (по умолчанию), ошибки молча игнорируются. Если true, ошибки вызывают исключение
ValueError
.Необязательные параметры encoding и errors указывают, как декодировать закодированные в процентах последовательности в символы Unicode, принимаемые методом
bytes.decode()
.Необязательный аргумент max_num_fields - максимальное количество полей для чтения. Если задан, то выбрасывается ошибка
ValueError
, если прочитано больше, чем max_num_fields полей.Необязательный аргумент separator - это символ, который будет использоваться для разделения аргументов запроса. По умолчанию он принимает значение
&
.Используйте функцию
urllib.parse.urlencode()
для преобразования таких списков пар в строки запроса.Изменено в версии 3.2: Добавьте параметры encoding и errors.
Изменено в версии 3.8: Добавлен параметр max_num_fields.
Изменено в версии 3.10: Добавлен параметр separator со значением по умолчанию
&
. Версии Python ранее Python 3.10 позволяли использовать как;
, так и&
в качестве разделителя параметров запроса. Это было изменено, чтобы разрешить только один ключ-разделитель, с&
в качестве разделителя по умолчанию.
-
urllib.parse.
urlunparse
(parts)¶ Конструирует URL из кортежа, возвращенного командой
urlparse()
. Аргумент parts может быть любым итерабельным кортежем из шести элементов. В результате может получиться немного другой, но эквивалентный URL, если URL, который был разобран изначально, содержал ненужные разделители (например,?
с пустым запросом; в RFC говорится, что они эквивалентны).
-
urllib.parse.
urlsplit
(urlstring, scheme='', allow_fragments=True)¶ Это похоже на
urlparse()
, но не отделяет параметры от URL. Обычно его следует использовать вместоurlparse()
, если требуется более современный синтаксис URL, позволяющий применять параметры к каждому сегменту пути части URL (см. RFC 2396). Для разделения сегментов пути и параметров необходима отдельная функция. Эта функция возвращает 5-элементный named tuple:(addressing scheme, network location, path, query, fragment identifier).
Возвращаемым значением является named tuple, доступ к элементам которого можно получить по индексу или как к именованным атрибутам:
Атрибут
Индекс
Значение
Значение, если отсутствует
scheme
0
Спецификатор схемы URL
параметр схема
netloc
1
Часть расположения сети
пустая строка
path
2
Иерархический путь
пустая строка
query
3
Компонент запроса
пустая строка
fragment
4
Идентификатор фрагмента
пустая строка
username
Имя пользователя
password
Пароль
hostname
Имя хоста (в нижнем регистре)
port
Номер порта в виде целого числа, если присутствует
Чтение атрибута
port
вызовет ошибкуValueError
, если в URL указан недопустимый порт. Дополнительную информацию об объекте result см. в разделе Результаты структурированного разбора.Несовпадение квадратных скобок в атрибуте
netloc
вызовет ошибкуValueError
.Символы в атрибуте
netloc
, которые разлагаются при нормализации NFKC (используемой кодировкой IDNA) на любой из/
,?
,#
,@
или:
, вызовут ошибкуValueError
. Если URL разложен перед разбором, то ошибка не возникнет.После WHATWG spec, обновляющего RFC 3986, из URL удаляются символы новой строки ASCII
\n
,\r
и табуляции\t
.Изменено в версии 3.6: Номера портов вне диапазона теперь поднимают
ValueError
, вместо того чтобы возвращатьNone
.Изменено в версии 3.8: Символы, влияющие на разбор netloc при нормализации NFKC, теперь будут поднимать
ValueError
.Изменено в версии 3.10: Символы новой строки и табуляции ASCII удаляются из URL.
-
urllib.parse.
urlunsplit
(parts)¶ Объединить элементы кортежа, возвращенные командой
urlsplit()
, в полный URL в виде строки. Аргумент parts может быть любым итерабельным кортежем из пяти элементов. В результате может получиться немного другой, но эквивалентный URL, если URL, который был разобран изначально, содержал ненужные разделители (например, символ ? с пустым запросом; в RFC говорится, что они эквивалентны).
-
urllib.parse.
urljoin
(base, url, allow_fragments=True)¶ Построение полного («абсолютного») URL путем объединения «базового URL» (base) с другим URL (url). Неформально, при этом используются компоненты базового URL, в частности схема адресации, сетевое расположение и (часть) путь, чтобы обеспечить недостающие компоненты в относительном URL. Например:
>>> from urllib.parse import urljoin >>> urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html') 'http://www.cwi.nl/%7Eguido/FAQ.html'
Аргумент allow_fragments имеет то же значение и значение по умолчанию, что и для
urlparse()
.Примечание
Если url является абсолютным URL (то есть начинается с
//
илиscheme://
), имя хоста url и/или схема будут присутствовать в результате. Например:>>> urljoin('http://www.cwi.nl/%7Eguido/Python.html', ... '//www.python.org/%7Eguido') 'http://www.python.org/%7Eguido'
Если вы не хотите такого поведения, предварительно обработайте url с помощью
urlsplit()
иurlunsplit()
, удалив возможные части scheme и netloc.Изменено в версии 3.5: Поведение обновлено для соответствия семантике, определенной в RFC 3986.
-
urllib.parse.
urldefrag
(url)¶ Если url содержит идентификатор фрагмента, верните модифицированную версию url без идентификатора фрагмента и идентификатор фрагмента в виде отдельной строки. Если в url нет идентификатора фрагмента, верните url немодифицированным и пустую строку.
Возвращаемым значением является named tuple, доступ к элементам которого можно получить по индексу или как к именованным атрибутам:
Атрибут
Индекс
Значение
Значение, если отсутствует
url
0
URL без фрагмента
пустая строка
fragment
1
Идентификатор фрагмента
пустая строка
Более подробную информацию об объекте результата см. в разделе Результаты структурированного разбора.
Изменено в версии 3.2: Результатом является структурированный объект, а не простой кортеж.
-
urllib.parse.
unwrap
(url)¶ Извлечение url из обернутого URL (то есть строки, отформатированной как
<URL:scheme://host/path>
,<scheme://host/path>
,URL:scheme://host/path
илиscheme://host/path
). Если url не является обернутым URL, он возвращается без изменений.
Разбор байтов в кодировке ASCII¶
Функции разбора URL изначально были разработаны для работы только с символьными строками. На практике полезно иметь возможность манипулировать правильно закавыченными и закодированными URL как последовательностями байтов ASCII. Соответственно, все функции разбора URL в этом модуле работают с объектами bytes
и bytearray
в дополнение к объектам str
.
Если переданы данные str
, результат также будет содержать только данные str
. Если переданы данные bytes
или bytearray
, результат будет содержать только данные bytes
.
Попытка смешать данные str
с bytes
или bytearray
в одном вызове функции приведет к возникновению предупреждения TypeError
, а попытка передать значения байтов не в формате ASCII вызовет предупреждение UnicodeDecodeError
.
Для облегчения преобразования объектов результата между str
и bytes
, все возвращаемые значения функций разбора URL содержат либо метод encode()
(когда результат содержит данные str
), либо метод decode()
(когда результат содержит данные bytes
). Сигнатуры этих методов совпадают с сигнатурами соответствующих методов str
и bytes
(за исключением того, что по умолчанию используется кодировка 'ascii'
, а не 'utf-8'
). Каждый из них выдает значение соответствующего типа, которое содержит либо данные bytes
(для методов encode()
), либо данные str
(для методов decode()
).
Приложениям, которым необходимо работать с потенциально некорректно цитируемыми URL-адресами, которые могут содержать данные не в формате ASCII, придется самостоятельно выполнять декодирование из байтов в символы перед вызовом методов разбора URL-адресов.
Поведение, описанное в этом разделе, относится только к функциям разбора URL. Функции цитирования URL используют свои собственные правила при создании или потреблении последовательностей байтов, как подробно описано в документации к отдельным функциям цитирования URL.
Изменено в версии 3.2: Функции разбора URL теперь принимают последовательности байтов в кодировке ASCII
Результаты структурированного разбора¶
Объекты результатов функций urlparse()
, urlsplit()
и urldefrag()
являются подклассами типа tuple
. Эти подклассы добавляют атрибуты, перечисленные в документации к этим функциям, поддержку кодирования и декодирования, описанную в предыдущем разделе, а также дополнительный метод:
-
urllib.parse.SplitResult.
geturl
()¶ Возвращает перекомбинированную версию исходного URL в виде строки. Он может отличаться от исходного URL тем, что схема может быть нормализована к нижнему регистру, а пустые компоненты могут быть удалены. В частности, будут удалены пустые параметры, запросы и идентификаторы фрагментов.
Для результатов
urldefrag()
будут удалены только пустые идентификаторы фрагментов. Для результатовurlsplit()
иurlparse()
все отмеченные изменения будут внесены в URL, возвращаемый этим методом.Результат этого метода остается неизменным, если его передать обратно через исходную функцию разбора:
>>> from urllib.parse import urlsplit >>> url = 'HTTP://www.Python.org/doc/#' >>> r1 = urlsplit(url) >>> r1.geturl() 'http://www.Python.org/doc/' >>> r2 = urlsplit(r1.geturl()) >>> r2.geturl() 'http://www.Python.org/doc/'
Следующие классы обеспечивают реализацию результатов структурированного разбора при работе с объектами str
:
-
class
urllib.parse.
DefragResult
(url, fragment)¶ Конкретный класс для
urldefrag()
результатов, содержащихstr
данные. Методencode()
возвращает экземплярDefragResultBytes
.Добавлено в версии 3.2.
-
class
urllib.parse.
ParseResult
(scheme, netloc, path, params, query, fragment)¶ Конкретный класс для
urlparse()
результатов, содержащихstr
данные. Методencode()
возвращает экземплярParseResultBytes
.
-
class
urllib.parse.
SplitResult
(scheme, netloc, path, query, fragment)¶ Конкретный класс для
urlsplit()
результатов, содержащихstr
данные. Методencode()
возвращает экземплярSplitResultBytes
.
Следующие классы обеспечивают реализацию результатов разбора при работе с объектами bytes
или bytearray
:
-
class
urllib.parse.
DefragResultBytes
(url, fragment)¶ Конкретный класс для
urldefrag()
результатов, содержащихbytes
данные. Методdecode()
возвращает экземплярDefragResult
.Добавлено в версии 3.2.
-
class
urllib.parse.
ParseResultBytes
(scheme, netloc, path, params, query, fragment)¶ Конкретный класс для
urlparse()
результатов, содержащихbytes
данные. Методdecode()
возвращает экземплярParseResult
.Добавлено в версии 3.2.
-
class
urllib.parse.
SplitResultBytes
(scheme, netloc, path, query, fragment)¶ Конкретный класс для
urlsplit()
результатов, содержащихbytes
данные. Методdecode()
возвращает экземплярSplitResult
.Добавлено в версии 3.2.
Цитирование URL¶
Функции цитирования URL сосредоточены на получении данных программы и обеспечении их безопасности для использования в качестве компонентов URL путем цитирования специальных символов и соответствующего кодирования текста, не относящегося к кодировке ASCII. Они также поддерживают обратные операции для воссоздания исходных данных из содержимого компонента URL, если эта задача еще не решена вышеуказанными функциями разбора URL.
-
urllib.parse.
quote
(string, safe='/', encoding=None, errors=None)¶ Замените специальные символы в string с помощью экранирования
%xx
. Буквы, цифры и символы'_.-~'
никогда не берутся в кавычки. По умолчанию эта функция предназначена для цитирования раздела пути URL. Дополнительный параметр safe задает дополнительные символы ASCII, которые не должны заключаться в кавычки - по умолчанию его значение'/'
.string может быть либо объектом
str
, либоbytes
.Изменено в версии 3.7: Переход от RFC 2396 к RFC 3986 для цитирования строк URL. «~» теперь включен в набор незарезервированных символов.
Необязательные параметры encoding и errors определяют, как поступать с символами, отличными от ASCII, которые принимаются методом
str.encode()
. encoding по умолчанию имеет значение'utf-8'
. errors по умолчанию имеет значение'strict'
, то есть неподдерживаемые символы вызывают предупреждениеUnicodeEncodeError
. encoding и errors не должны быть предоставлены, если string являетсяbytes
, или если будет вызвана ошибкаTypeError
.Обратите внимание, что
quote(string, safe, encoding, errors)
эквивалентноquote_from_bytes(string.encode(encoding, errors), safe)
.Пример:
quote('/El Niño/')
дает'/El%20Ni%C3%B1o/'
.
-
urllib.parse.
quote_plus
(string, safe='', encoding=None, errors=None)¶ Аналогично
quote()
, но также заменяет пробелы на знаки плюс, что требуется для цитирования значений HTML-формы при построении строки запроса для URL. Знаки плюс в исходной строке экранируются, если они не включены в safe. Также safe не имеет значения по умолчанию'/'
.Пример:
quote_plus('/El Niño/')
дает'%2FEl+Ni%C3%B1o%2F'
.
-
urllib.parse.
quote_from_bytes
(bytes, safe='/')¶ Подобно
quote()
, но принимает объектbytes
, а неstr
, и не выполняет кодирование строки в байты.Пример:
quote_from_bytes(b'a&\xef')
дает'a%26%EF'
.
-
urllib.parse.
unquote
(string, encoding='utf-8', errors='replace')¶ Заменяет эскейпы
%xx
на их односимвольный эквивалент. Необязательные параметры encoding и errors указывают, как декодировать закодированные в процентах последовательности в символы Unicode, как это принято в методеbytes.decode()
.string может быть либо объектом
str
, либоbytes
.encoding по умолчанию имеет значение
'utf-8'
. ошибки по умолчанию'replace'
, что означает, что недопустимые последовательности заменяются символом-заполнителем.Пример:
unquote('/El%20Ni%C3%B1o/')
дает'/El Niño/'
.Изменено в версии 3.9: Параметр string поддерживает объекты bytes и str (ранее только str).
-
urllib.parse.
unquote_plus
(string, encoding='utf-8', errors='replace')¶ Аналогично
unquote()
, но также заменяет знаки плюс на пробелы, что требуется для снятия кавычек со значений HTML-формы.Строка должна быть
str
.Пример:
unquote_plus('/El+Ni%C3%B1o/')
дает'/El Niño/'
.
-
urllib.parse.
unquote_to_bytes
(string)¶ Заменяет эскейпы
%xx
на их однооктетные эквиваленты и возвращает объектbytes
.string может быть либо объектом
str
, либоbytes
.Если это
str
, то неаскриптованные не-ASCII символы в string кодируются в байты UTF-8.Пример:
unquote_to_bytes('a%26%EF')
даетb'a&\xef'
.
-
urllib.parse.
urlencode
(query, doseq=False, safe='', encoding=None, errors=None, quote_via=quote_plus)¶ Преобразование объекта отображения или последовательности двухэлементных кортежей, которые могут содержать объекты
str
илиbytes
, в текстовую строку ASCII с процентной кодировкой. Если полученная строка будет использоваться в качестве данных для операции POST с помощью функцииurlopen()
, то она должна быть закодирована в байты, иначе получитсяTypeError
.Результирующая строка представляет собой серию пар
key=value
, разделенных символами'&'
, где ключ и значение заключены в кавычки с помощью функции quote_via. По умолчанию для цитирования значений используетсяquote_plus()
, что означает, что пробелы цитируются как символ'+'
, а символы „/“ кодируются как%2F
, что соответствует стандарту для GET-запросов (application/x-www-form-urlencoded
). Альтернативной функцией, которую можно передать как quote_via, являетсяquote()
, которая кодирует пробелы как%20
и не кодирует символы „/“. Для максимального контроля над тем, что берется в кавычки, используйтеquote
и укажите значение safe.Когда в качестве аргумента query используется последовательность двухэлементных кортежей, первый элемент каждого кортежа является ключом, а второй - значением. Элемент значения сам по себе может быть последовательностью, и в этом случае, если необязательный параметр doseq имеет значение
True
, для каждого элемента последовательности значений ключа генерируются отдельные парыkey=value
, разделенные'&'
. Порядок параметров в закодированной строке будет соответствовать порядку кортежей параметров в последовательности.Параметры safe, encoding и errors передаются в quote_via (параметры encoding и errors передаются только тогда, когда элемент запроса является
str
).Чтобы обратить этот процесс кодирования, в этом модуле предусмотрены
parse_qs()
иparse_qsl()
для разбора строк запроса в структуры данных Python.Обратитесь к urllib examples, чтобы узнать, как метод
urllib.parse.urlencode()
можно использовать для генерации строки запроса URL или данных для POST-запроса.Изменено в версии 3.2: query поддерживает байты и строковые объекты.
Добавлено в версии 3.5: quote_via параметр.
См.также
- WHATWG - URL Живой стандарт
Рабочая группа по стандарту URL, который определяет URL, домены, IP-адреса, формат application/x-www-form-urlencoded и их API.
- RFC 3986 - Единые идентификаторы ресурсов
Это текущий стандарт (STD66). Любые изменения в модуле urllib.parse должны соответствовать ему. Могут наблюдаться некоторые отклонения, которые в основном предназначены для целей обратной совместимости и для определенных де-факто требований к синтаксическому анализу, как это обычно наблюдается в основных браузерах.
- RFC 2732 - Формат для буквенных адресов IPv6 в URL.
Определяет требования к разбору URL-адресов IPv6.
- RFC 2396 - Единые идентификаторы ресурсов (URI): общий синтаксис
Документ, описывающий общие синтаксические требования к унифицированным именам ресурсов (URN) и унифицированным локаторам ресурсов (URL).
- RFC 2368 - Схема URL mailto.
Требования к парсингу для схем URL mailto.
- RFC 1808 - относительные унифицированные локаторы ресурсов
Этот запрос на комментарии включает правила соединения абсолютного и относительного URL, в том числе достаточное количество «Ненормальных примеров», которые регулируют обработку пограничных случаев.
- RFC 1738 - Единые указатели ресурсов (URL)
Это определяет формальный синтаксис и семантику абсолютных URL.