【问题标题】:How to parse URL encoded data recieved via POST如何解析通过 POST 接收的 URL 编码数据
【发布时间】:2017-12-13 02:04:57
【问题描述】:

我正在为通过 URL 编码的POST 发送数据的服务编写一个 django webhook。示例POST 如下所示:

POST id=a5f3ca18-2935-11e7-ad46-08002720e7b4
 &originator=1123456789
 &recipient=1987654321
 &subject=MMS+reply
 &body=View+our+logo
 &mediaUrls[0]=https://storage.googleapis.com/mms-assets/20170424/a0b40b77-30f8-4603-adf1-00be9321885b-messagebird.png
 &mediaContentTypes[0]=image/png
 &createdDatetime=2017-04-24T20:15:30+00:00

我了解如何解析json,但我之前没有遇到过这种格式。似乎没有任何有用的教程来说明如何通过POST 处理这个问题。我被困在这一点上,非常感谢您的帮助。

【问题讨论】:

标签: python json django


【解决方案1】:

Python 2:

>>> from urlparse import parse_qs
>>> parse_qs('foo=spam&bar=answer&bar=42')
{'foo': ['spam'], 'bar': ['answer', '42']}

Python 3:

>>> from urllib.parse import parse_qs
>>> parse_qs('foo=spam&bar=answer&bar=42')
{'foo': ['spam'], 'bar': ['answer', '42']}

两个python 2/3:

>>> from six.moves.urllib.parse import parse_qs

UPD

还有parse_qsl 函数返回一个包含两项元组的列表,比如

>>> parse_qsl('foo=spam&bar=answer&bar=42')
[('foo', 'spam'), ('bar', 'answer'), ('bar', '42')]

将这样的列表传递给dict() 构造函数是非常合适的,这意味着你得到了一个每个名称只有一个值的字典。请注意,姓氏/值对优先于早期出现的同名(参见库参考中的dict)。

【讨论】:

  • 此解决方案不适用于广泛接受的嵌套数据。例如parse_qsl('foo=spam&bar=answer&bar[1]=42' 将导致[('foo', 'spam'), ('bar', 'answer'), ('bar[1]', '42')]
  • 这种形式无论如何都不是标准的。
猜你喜欢
  • 2019-07-25
  • 1970-01-01
  • 2022-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多