Как отделить тело от почтового запроса - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь отделить тело от почтового запроса, и мне интересно, каков наилучший способ сделать это.Я думал о разделении с помощью «&» для извлечения каждого параметра, а затем с помощью «=» для извлечения поля / значения пары

data1=value&data2=value2

Это будет разделено следующим образом:

data1 value
data2 value2

Однако, если полученные данные содержат «&» или «=», они не будут работать: метод split интерпретирует этот символ в значении как разделитель, удаляя его и создавая другое поле.Лучший пример здесь - это значение, полученное в base64.Например, «значение» представляется в base64 как dmFsdWU =

data1=dmFsdWU=&data2=value2

Это будет разделено как:

data1 dmFsdWU 
data2 value2

Любое предложение о том, что я мог бы сделать здесь?Я думал о кодировании значения данных, поэтому dmFsdWU = принимается как dmFsdWU% 3D, но я не знаю, есть ли лучшее решение

Спасибо

1 Ответ

0 голосов
/ 22 октября 2018

Используйте второй параметр split для ограничения разделения:

in_str = "data1=dmFsdWU=&data2=value2"
param_list = [param_expr.split('=', 1) for param_expr in in_str.split('&')]

Результат:

[['data1', 'dmFsdWU='], ['data2', 'value2']]

Дефицит

ВыЯ не описал вашу полную грамматику интерпретации: что делать, если первое значение содержит &.Например, измените ваш пример на

data1 = dmFsd & WU & data2 = value2

Где вы намереваетесь

data1 dmFsd&WU
data2 value2

Какие правила синтаксического анализа получают здесь?Существуют ли ограничения на имя поля, которые устранят это?Например, если имя поля должно быть буквенно-цифровым, то ваша задача синтаксического анализа возможна, но становится немного сложнее:

  • Найдите первое =;это определяет имя первого поля
  • Найти следующее & ...
  • Найти следующее =;это конец имени второго поля
  • Найдите буквенно-цифровую последовательность, оканчивающуюся на эту последнюю =;используйте это как второе имя поля.

    Теперь вы определили два имени поля;оставшиеся две строки являются значениями.


HOWEVER

Обратите внимание, что существуют патологические строки, которые не могут быть однозначно проанализированы в парепар поле / значение.Проще говоря, давайте возьмем ваш пример:

data1=value&data2=value2

Почему это не одна пара поле / значение?

data1 value&data2=value2

Вы столкнетесь с этим в любое время, когда значение можетсодержат как &, так и =.

...