繁体   English   中英

如何从发布请求中拆分正文

[英]How to split body from a post request

我正在尝试从邮寄请求中拆分尸体,我想知道这样做的最佳方法是什么。 我正在考虑通过“&”拆分以提取每个参数,然后通过“ =”以拆分对字段/值

data1=value&data2=value2

它将拆分如下:

data1 value
data2 value2

但是,如果接收到的数据包含“&”或“ =”,则它将不起作用: split方法将值中的该字符解释为分隔符,将其删除并创建另一个字段。 最好的示例是在base64中接收的值。 例如,“值”在base64中表示为dmFsdWU =

data1=dmFsdWU=&data2=value2

它将拆分为:

data1 dmFsdWU 
data2 value2

关于我在这里可以做什么建议? 我正在考虑对数据的值进行编码,因此dmFsdWU =作为dmFsdWU%3D接收,但是我不知道是否有更好的解决方案

谢谢

使用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 =值2

你打算去哪里

data1 dmFsd&WU
data2 value2

在这里获得什么解析规则? 字段名称是否有限制,以消除歧义? 例如,如果字段名称必须为字母数字,那么您的解析工作是可能的,但会变得有些棘手:

  • 找到第一个= ; 这确定了第一个字段名称
  • 查找下一个& ...
  • 找到下一个= ; 这是第二个字段名称的结尾
  • 找到以后者=结尾的字母数字序列; 使用它作为第二个字段名称。

    现在,您已经确定了两个字段名称; 其余两个字符串是值。


然而

请注意,有些病理字符串无法唯一地解析为一对字段/值对。 最简单地,让我们举一个给定的例子:

data1=value&data2=value2

为什么这不是单个字段/值对?

data1 value&data2=value2

只要允许值同时包含&=就会遇到这种情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM