解码self.request.body

Uri*_*Uri 1 python google-app-engine wsgi

在我的帖子处理程序中,消息的主体是一个json.在self.request.body中,我收到一条HTML编码的消息:

%7B+%22name%22%3A+%22John+Dao%22%2C+%22Age%22%3A+42+%7D=
Run Code Online (Sandbox Code Playgroud)

看一下网络流量,有效载荷实际上是:

{ "name": "John Dao", "Age": 42 }
Run Code Online (Sandbox Code Playgroud)

所以,我很确定编码发生在服务器上.我如何解码这个字符串,或以某种方式告诉json.loads接受编码的消息,或者更好 - 告诉WSGI(它是谷歌应用引擎)不编码身体与beging?

akg*_*ood 7

>>> import urllib
>>> urllib.unquote_plus("%7B+%22name%22%3A+%22John+Dao%22%2C+%22Age%22%3A+42+%7D=")
'{ "name": "John Dao", "Age": 42 }='
Run Code Online (Sandbox Code Playgroud)

看起来WebOb的GAE实现正在尝试解析和重写POST主体,就好像它的内容类型是"application/x-www-urlencoded" - 即使url解码的字符串附加了"=".

如果是这种情况,并且您可以更改客户端行为,请尝试将其设置为类似"application/json"的内容.