Spec-Zone.ru › Python 3.11

urllib.parse — Разбор URL-адресов на составляющие

Исходный код: Lib/urllib/parse.py

Этот модуль определяет стандартный интерфейс для разбиения строк универсальных указателей ресурсов (URL) на составляющие (схема адресации, сетевое расположение, путь и т. д.), для объединения составляющих обратно в строку URL и для преобразования «относительного URL» в абсолютный URL с учётом «базового URL».

Модуль разработан в соответствии с интернет-RFC по относительным универсальным указателям ресурсов. Он поддерживает следующие схемы URL: file, ftp, gopher, hdl, http, https, imap, mailto, mms, news, nntp, prospero, rsync, rtsp, rtsps, 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-элементную именованную кортеж. Это соответствует общей структуре 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 и, следовательно, начинаются с компонента path.

>>> 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 устанавливается в пустую строку в возвращаемом значении.

Возвращаемое значение — именованная кортеж, что означает, что к его элементам можно получить доступ по индексу или в качестве именованных атрибутов, которые являются:

Атрибут

Индекс

Значение

Значение при отсутствии

scheme

0

Указатель схемы URL

параметр scheme

netloc

1

Часть сетевого расположения

пустая строка

path

2

Иерархический путь

пустая строка

params

3

Параметры последнего элемента пути

пустая строка

query

4

Компонент запроса

пустая строка

fragment

5

Идентификатор фрагмента

пустая строка

username

Имя пользователя

None

password

Пароль

None

hostname

Имя хоста (в нижнем регистре)

None

port

Номер порта в виде целого числа, если он присутствует

None

Чтение атрибута port вызовет ValueError, если в URL указан некорректный порт. См. раздел Структурированные результаты разбора для получения дополнительной информации об объекте результата.

Несоответствующие квадратные скобки в атрибуте 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='')

Предупреждение

urlparse() не выполняет валидацию. Подробности см. в разделе Безопасность разбора URL.

Изменено в версии 3.2: Добавлены возможности разбора IPv6 URL.

Изменено в версии 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 задают, как декодировать последовательности, кодированные процентами, в символы Юникода, как принимает метод bytes.decode().

Необязательный аргумент max_num_fields — максимальное количество полей для чтения. Если установлено, то если прочитано более max_num_fields полей, генерируется ValueError.

Необязательный аргумент 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 определяют, как декодировать проценты кодированные последовательности в символы Юникода, как принимается методом 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, позволяющая применять параметры к каждому сегменту части path URL (см. RFC 2396). Для разделения сегментов пути и параметров требуется отдельная функция. Эта функция возвращает кортеж с 5 элементами именованного кортежа:

(addressing scheme, network location, path, query, fragment identifier).

Возвращаемое значение — именованный кортеж, его элементы можно получить по индексу или именованным атрибутам:

Атрибут

Индекс

Значение

Значение, если отсутствует

scheme

0

Указатель схемы URL

параметр scheme

netloc

1

Часть сетевого местоположения

пустая строка

path

2

Иерархический путь

пустая строка

query

3

Компонент запроса

пустая строка

fragment

4

Идентификатор фрагмента

пустая строка

username

Имя пользователя

None

password

Пароль

None

hostname

Имя хоста (в нижнем регистре)

None

port

Номер порта как целое число, если присутствует

None

Обращение к атрибуту port вызовет ValueError, если в URL указан недопустимый порт. Дополнительную информацию об объекте результата см. в разделе Структурированные результаты разбора.

Несовпадающие квадратные скобки в атрибуте netloc вызовут ValueError.

Символы в атрибуте netloc которые разлагаются при нормализации NFKC (как используется в кодировании IDNA) в любой из /, ?, #, @, или : вызовут ValueError. Если URL разлагается до разбора, ошибка не будет вызвана.

Следуя некоторым из спецификаций WHATWG, которые обновляют RFC 3986, управляющие символы C0 и пробелы удаляются из URL. \n, \r и табуляции \t удаляются из URL в любой позиции.

Предупреждение

urlsplit() не выполняет валидацию. Подробности см. в разделе Безопасность разбора URL.

Изменено в версии 3.6: Порты вне диапазона теперь вызывают ValueError вместо возвращения None.

Изменено в версии 3.8: Символы, влияющие на разбор netloc при нормализации NFKC, теперь будут вызывать ValueError.

Изменено в версии 3.10: Символы ASCII новой строки и табуляции удаляются из URL.

Изменено в версии 3.11.4: Ведущие управляющие символы C0 и пробелы WHATWG удаляются из 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 без изменений и пустую строку.

Результат — именованная кортеж, его элементы можно получить по индексу или как именованные атрибуты:

Атрибут

Индекс

Значение

Значение, если атрибут отсутствует

url

0

URL без фрагмента

пустая строка

fragment

1

Идентификатор фрагмента

пустая строка

См. раздел Структурированные результаты разбора для получения дополнительной информации об объекте результата.

Изменено в версии 3.2: Результат — структурированный объект, а не простой 2-кортеж.

urllib.parse.unwrap(url)

Извлекает URL из обернутого URL (т.е. строки, отформатированной как <URL:scheme://host/path>, <scheme://host/path>, URL:scheme://host/path или scheme://host/path). Если url не является обернутым URL, он возвращается без изменений.

Безопасность разбора URL

API urlsplit() и urlparse() не выполняют валидацию входных данных. Они могут не генерировать ошибки для входных данных, которые другие приложения считают недопустимыми. Они также могут успешно обработать некоторые входные данные, которые не считаются URL в других местах. Их цель — практическая функциональность, а не чистота.

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

Мы рекомендуем пользователям этих API, где значения могут быть использованы где угодно с последствиями для безопасности, писать защищённый код. Проверьте данные в своём коде, прежде чем доверять возвращаемым компонентам. Имеет ли этот scheme смысл? Это разумный path? Есть ли что-то необычное в этом hostname? и т. д.

Что считается URL, не имеет универсального определения. У разных приложений разные потребности и желаемые ограничения. Например, живой спецификация WHATWG описывает требования веб-клиентов, таких как веб-браузер. В то время как RFC 3986 более общий. Эти функции учитывают некоторые аспекты обоих, но не могут претендовать на соответствие ни одному из них. API и существующий пользовательский код с ожиданиями определённого поведения появились до обоих стандартов, что заставляет нас быть очень осторожными при внесении изменений в поведение API.

Парсинг 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)

Заменить специальные символы в строке с помощью кодирования %xx. Буквы, цифры и символы '_.-~' никогда не кодируются. По умолчанию эта функция предназначена для кодирования пути URL. Дополнительные ASCII-символы, которые не должны кодироваться, задаются параметром safe — его значение по умолчанию '/'.

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'. errors по умолчанию '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-форм.

string должен быть объектом 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 с кодированием в процентах. Если результирующая строка должна быть использована в качестве data для операции 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 для получения информации о том, как можно использовать метод urllib.parse.urlencode() для генерации строки запроса URL или данных для POST-запроса.

Изменено в версии 3.2: query поддерживает объекты bytes и string.

Добавлена в версии 3.5: параметр quote_via.

END_OF_DOCUMENT_MARKER

См. также

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 - Относительные унифицированные локаторы ресурсов

Этот документ RFC содержит правила объединения абсолютного и относительного URL, включая ряд «аномальных примеров», которые регулируют обработку граничных случаев.

RFC 1738 - Унифицированные локаторы ресурсов (URL)

В данном документе определена формальная синтаксическая структура и семантика абсолютных URL.

© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.11/library/urllib.parse.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API