我正在尝试将正文与发布请求分开,我想知道最好的方法是什么。我正在考虑用“&”分割来提取每个参数,然后用“=”来提取字段/值对
data1=value&data2=value2
它将按如下方式拆分:
data1 value
data2 value2
但是,如果接收到的数据包含“&”或“=”,则它将不起作用:split
方法会将值中的该字符解释为分隔符,将其删除并创建另一个分隔符 field 。这里最好的例子是以 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
任何时候允许值同时包含 &
和 =
时,您都会遇到这种情况。
关于python - 如何从帖子请求中拆分正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52933493/