python - 如何从帖子请求中拆分正文

标签 python encoding split python-requests

我正在尝试将正文与发布请求分开,我想知道最好的方法是什么。我正在考虑用“&”分割来提取每个参数,然后用“=”来提取字段/值对

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/

相关文章:

python - 3 个数据框和 3 个规则正在运行以将数据插入另一个数据框 - 没有公共(public)列 - 大数据

c - 使用 FFMPEG 编码的 Wav 文件在使用 VLC 播放器播放时存在编解码器问题

java - 从字符串中提取 2 个整数

postgresql - 拆分 PostgreSQL 查询过滤

python - Python 中的名称错误

python - "Browser Not Supported"使用BeautifulSoup进行网页抓取时出错

python - 具有多个服务类别的云端点

unicode - ModSecurity OWASP 核心规则集 - unicode 误报

ruby - 如何在 Ruby 中指定输出文件编码?

bash - 使用 FFmpeg 将视频分割成等长的片段