Сообщить об ошибке.

Функция urlencode() модуля urllib.parse в Python

Создать key=value строку из словаря для GET/POST запроса

Синтаксис:

import urllib.parse

urllib.parse.urlencode(query, doseq=False, safe='',
                       encoding=None, 
                       errors=None, 
                       quote_via=quote_plus)

Параметры:

Возвращаемое значение:

  • строка представляющая ряд пар key=value, разделенных символами '&'.

Описание:

Функция urlencode() модуля urllib.parse преобразует объект сопоставления (словарь) или последовательность кортежей, состоящих из 2-х элементов в текстовую ASCII строку с процентным кодированием.

Ключи и значения объекта сопоставления, а так же оба элемента кортежа, передаваемые в query могут иметь тип str ИЛИ bytes.

Результирующая строка представляет собой ряд пар key=value, разделенных символами '&', где и ключ key и значение value заключаются в кавычки с помощью функции для аргумента quote_via. Для цитирования значений, по умолчанию используется функция quote_plus(), это означает, что пробелы заключаются в кавычки, как символ '+', а символы '/' кодируются как %2F, что соответствует стандарту для запросов GET (application/x-www-form-urlencoded). Альтернативной функцией, которая может быть передана как quote_via, является quote(), которая будет кодировать пробелы как %20, а символы ‘/’ - кодировать не будет. Для максимального контроля того, что кодируется, используйте аргумент quote, а так же укажите значение аргумента safe.

Когда в качестве аргумента query используется последовательность двухэлементных кортежей, то первый элемент каждого кортежа является ключом, а второй - значением. Элемент value сам по себе может быть последовательностью, и в этом случае, если необязательный аргумент doseq принимает значение True, для каждого элемента последовательности значений ключа генерируются отдельные пары key=value, разделенные символом '&'. Порядок параметров в кодированной строке будет соответствовать порядку кортежей параметров в последовательности.

Аргументы safe, encoding и errors передаются в quote_via (параметры encoding и errors передаются только в том случае, если элемент запроса является текстовой строкой str).

Чтобы наоборот, разобрать строку с элементами POST/GET запроса в структуры данных Python, то нужно воспользоваться функциями этого модуля parse_qs() и parse_qsl() .

Примеры использования urllib.parse.urlencode():

Используем функцию urllib.parse.urlencode() для генерации строки запроса URL-адреса или данных для POST-запроса.

Вот пример генерации URL-адреса, содержащего параметры для GET/POST запроса:

>>> import urllib.parse
>>> query = {'spam': 1, 'eggs': 2, 'bacon': 'foo'}
>>> params = urllib.parse.urlencode(query)
>>> f'http://example.com/query?{params}'
# 'http://example.com/query?spam=1&eggs=2&bacon=foo'

Поведение аргумента doseq

>>> import urllib.parse
>>> query = {'spam': 1, 'bacon': ['foo', 'bar']}

# doseq=False по умолчанию
>>> urllib.parse.urlencode(query)
# 'spam=1&bacon=%5B%27foo%27%2C+%27bar%27%5D'

# doseq=True
>>> urllib.parse.urlencode(query, doseq=True)
# 'spam=1&bacon=foo&bacon=bar'

Изменение функции кодирования quote_via.

>>> import urllib.parse
>>> query = {'spam': 1, 'bacon': ['foo', 'bar']}
>>> urllib.parse.urlencode(query, quote_via=urllib.parse.quote)
# 'spam=1&bacon=%5B%27foo%27%2C%20%27bar%27%5D

Передача списка кортежей, вместо словаря.

>>> import urllib.parse
>>> query = [('spam': 1), ('bacon': ['foo', 'bar'])]
>>> urllib.parse.urlencode(query, doseq=True)
# 'spam=1&bacon=foo&bacon=bar'