Шаг 239.
Основы языка Python.
Взаимодействие с Интернетом. Кодирование и декодирование строки запроса

    На этом шаге мы рассмотрим ряд функций, позволяющих выполнить указанные действия.

    На предыдущем шаге мы научились разбирать URL-адрес на составляющие. Обратите внимание на то, что значение параметра <Запрос> возвращается в виде строки. Строка запроса является составной конструкцией, содержащей пары параметр=значение. Все специальные символы внутри названия параметра и значения кодируются последовательностями %nn. Например, для параметра str, имеющего значение "Строка" в кодировке Windows-1251, строка запроса будет выглядеть так:

  str=%Dl%F2%F0%EE%EA%E0

    Если строка запроса содержит несколько пар параметр=значение, то они разделяются символом &. Добавим параметр v со значением 10:

  str=%Dl%F2%F0%EE%EA%E0&v=10

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

  str=%Dl%F2%F0%EE%EA%EG&v=10&v=20

    Разобрать строку запроса на составляющие и декодировать данные позволяют следующие функции из модуля urllib.parse:

    Выполнить обратную операцию - преобразовать отдельные составляющие в строку запроса - позволяет функция urlencode(). Формат функции:

  urlencode (<Объект> [, doseq=False] [, safe=''] [, encoding=None]
    [, errors=None])

    В качестве первого параметра можно указать словарь с данными или последовательность, каждый элемент которой содержит кортеж из двух элементов: первый элемент такого кортежа станет параметром, а второй элемент - его значением. Параметры и значения автоматически обрабатываются с помощью функции quote_plus() из модуля urllib.parse. В случае указания последовательности параметры внутри строки будут идти в том же порядке, что и внутри последовательности. Пример указания словаря и последовательности приведен ниже.

>>> from urllib.parse import urlencode
>>> params = {"str": "Строка 2", "var": 20} # Словарь
>>> urlencode (params, encoding="cp1251")
'var=20&str=%D1%F2%F0%EE%EA%E0+2'
>>> params = [ ("str", "Строка 2"), ("var", 20) ] # Список
>>> urlencode (params, encoding="cp1251")
'str=%D1%F2%F0%EE%EA%E0+2&var=20'

    Если необязательный параметр doseq в функции urlencode() имеет значение True, то во втором параметре кортежа можно указать последовательность из нескольких значений. В этом случае в строку запроса добавляются несколько параметров со значениями из этой последовательности. Значение параметра doseq по умолчанию - False. В качестве примера укажем список из двух элементов.

>>> params = [ ("var", [10, 20]) ]
>>> urlencode(params, doseq=False, encoding="cp1251")
'var=%5B10%2C+20%5D'
>>> urlencode(params, doseq=True, encoding="cp1251")
'var=10&var=20'

    Последовательность также можно указать в качестве значения в словаре:

>>> params = { "var": [10, 20] }
>>> urlencode(params, doseq=True, encoding="cp1251")
'var=10&var=20'

    На следующем шаге мы закончим изучение этого вопроса.




Предыдущий шаг Содержание Следующий шаг