我正在尝试实现一个简单的扭曲 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/