python - 如何使用 Twisted (python) 正确解析请求字符串

标签 python arrays parsing request twisted

我正在尝试实现一个简单的扭曲 HTTP 服务器,它会响应从数据库加载图 block 的请求并返回它们。但是我发现它解释请求字符串的方式很奇怪。

这是我向服务器发送的内容:

curl -d "request=loadTiles&grid[0][x]=17&grid[0][y]=185&grid[1][x]=18&grid[1][y]=184" http://localhost:8080/fetch/

我希望 request.args 是:

{'request': 'loadTiles', 'grid': [{'x': 17, 'y': 185}, {'x': 18, 'y': 184}]}

Twisted 如何解释 request.args:

{'grid[1][y]': ['184'], 'grid[0][y]': ['185'], 'grid[1][x]': ['18'], 'request': ['loadTiles'], 'grid[0][x]': ['17']}

是否可以让它自动解析请求字符串并为网格参数创建一个列表,还是我必须手动执行?

我可以对网格参数进行 json 编码,然后在服务器端对其进行解码,但这似乎是一个不必要的 hack。

最佳答案

我不知道为什么您会期望您的 urlencoded 数据根据一些临时的非标准规则进行解码,或者为什么您会认为标准处理“奇怪”; [ 在查询字符串中并不特殊。什么软件以这种方式解码它们?

无论如何,这并不是真正的 Twisted,而是 Python(更一般地说,是解析此数据的 web-standard 方式)。您可以通过 cgi.parse_qs 查看返回的数据类型交互作用。例如:

>>> import cgi
>>> cgi.parse_qs("")
{}
>>> cgi.parse_qs("x=1")
{'x': ['1']}
>>> cgi.parse_qs("x[something]=1")
{'x[something]': ['1']}
>>> cgi.parse_qs("x=1&y=2")
{'y': ['2'], 'x': ['1']}
>>> cgi.parse_qs("x=1&y=2&x=3")
{'y': ['2'], 'x': ['1', '3']}

我希望这能帮您解决问题。

关于python - 如何使用 Twisted (python) 正确解析请求字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8438179/

相关文章:

c - 为什么下面的代码不会在多次运行时生成随机字符串?

计算并删除数组 c 中的重复项

android - 使用 XML Dom Parser 解析时如何检查根节点值?

php - 任何用于 ruby​​ 和 PHP 的 html/css 解析库?

python - 如何调用与之前迭代相同的随机值?

arrays - 如何在 Swift 中创建静态数组?

python - 我有一个分配给 django 模型 charfield 的长整数列表。 long 列表转换为 unicode 列表

sql - 使用 pl sql 将 xml 文件解析为 2 个 oracle header-detail 表

python - 使用 doxygen 记录 Python 包

python - 切换 Homebrew 安装的 Python 版本