gpt4 book ai didi

python - 解析 POST json 消息 Django/GAE 的问题

转载 作者:太空宇宙 更新时间:2023-11-03 12:51:59 25 4
gpt4 key购买 nike

当我使用 POST 向 GAE 发送带有 json 参数的 POST 消息时,服务器解析的 QueryDict 没有像 json 那样解析 ...

我在本期发现了类似的问题:iphone Json POST request to Django server creates QueryDict within QueryDict

可能是 GAE 配置有问题。我有 Python 2.6.6 和最新版本的 GAE。首先,如果我使用 nc 工具获取 POST,则 POST 消息是完美的:

POST /url/ HTTP/1.1
Accept: application/jsonrequest
Content-type: application/json
Accept-Encoding: gzip
Content-Length: 458
Host: 192.168.1.1:8080
Connection: Keep-Alive

{"id":"xxx","jsonrpc":"2.0","method":"XXX","params":{...}]}

然后在服务器控制台中我收到以下消息:

DEBUG    2010-09-16 06:47:05,891 dev_appserver.py:1693] Access to module file denied: /usr/lib/pymodules/python2.6/simplejson
DEBUG 2010-09-16 06:47:05,894 dev_appserver.py:1700] Could not import "_json": Disallowed C-extension or built-in module
DEBUG 2010-09-16 06:47:05,897 dev_appserver.py:1700] Could not import "_json": Disallowed C-extension or built-in module

还有想法?

服务器中的查询字典是<QueryDict: {u'{"id":"xxx","jsonrpc":"2.0","method":"XXX","params":{...}}': [u'']}>

正如您可以检查 django 处理程序将 POST 请求的 json 解析为新字典的键 ...

在链接的问题中有下一个解决方案......

hack_json_value = request.POST.keys()[0]
hack_query_dict = json.loads(hack_json_value)
foo = hack_query_dict['foo']
bar = hack_query_dict['bar']

但也许你可以帮我找到另一个......

谢谢,

最佳答案

在使用 json 时,您需要记住的第一件事是 AppEngine 与 python 2.5 一起使用。这意味着 json 还不是 python 的标准部分。

为了解决这个问题,我在网上的某个地方找到了 simplejson 并将其与我的代码打包在一起。内置 json 和 simplejson 的 API 本质上是相同的(或者也许我只是没有注意到任何不同)所以只需像这样导入它:

import simplejson as json

并像您习惯的那样使用它。

现在,关于 QueryDict。是的,您获得的是原始 POST 数据,没有合理的理由将其解析为 json 并假装它是一个正常的基于查询的 POST 请求。老实说,我从来没有想过 django 甚至能够为我们做出这种判断的飞跃。因此,要获取您的数据,请按照以下方式使用:

data = json.loads(request.raw_post_data)

有关 django 期望在原始 POST 数据中看到的内容的引用,请在此处查看:http://en.wikipedia.org/wiki/POST_(HTTP) ,特别是关于 application/x-www-form-urlencoded 如何工作的部分。

关于python - 解析 POST json 消息 Django/GAE 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3727118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com