Django中raw_post_data解码的问题

时间:2012-06-15 18:01:40

标签: django bytestring

我偶然发现了一个我无法解决的奇怪问题:

在我的Django应用程序中,有一个方法会受到来自java applet的POST的攻击,该applet会向它发送一个JSON对象。 Django方法解析它如下:

req = json.loads(request.raw_post_data)

并根据结果返回一个值。我没有写这段代码,但昨天我被派去调查这个方法触发的错误。它说有“ValueError:Expecting property name:line 1 column 1(char 1)”。

我发现我的原始帖子数据如下所示:

{#012#011"ImmutableMachineFactors": #012#011{#012#011#011"machineName": "lukka",#012#011#011"osName": "MacOS"}}

它的类型是字符串,但是,我试图用空格替换这些奇怪的字符或没有失败。它只会忽略sub()命令。我知道raw_post_data返回一个bytestring,但当我尝试使用以下命令将其转换为常规字符串时:

mystring.decode('utf-8')

它确实添加了你的符号,但没有删除那些奇怪的字符。奇怪的是,在许多情况下(在我的个人机器上),Django很乐意将这种数据转换为JSON,它有时只会失败,这让我相信触发错误的JSON格式不正确,但是当我要删除时所有#011和#012字符,它完美解析。

我的问题是: 1)那些疯狂的东西是什么? (#011,#012)。我试图谷歌,但这些是在搜索中找到的非常常见的东西,所以我找不到任何相关的东西。 2)如何将此字节串转换为常规字符串,以便我可以替换这些字符?或者这是解决这个问题的方法吗?

谢谢! 卢卡

1 个答案:

答案 0 :(得分:0)

这可能为时已晚,无法提供帮助,但由于QueryDict实例(request.POST或request.DATA)是不可变的,因此期望request.raw_post_data也是不可变的是合理的。在更改之前,您必须制作副本。