我使用此代码将一些数据发布到Django支持的站点:
url = "http://example.com:8080/api/v1/data/"
request = {"info": "", "data": [{"extra": 0, "amount": 100, "id": "10000000016"}, {"extra": 0, "amount": 100, "id": "10000000002"}]}
opener = urllib2.build_opener()
opener.addheaders = [("Authorization", "Token "+self.token),
("Accept", "application/json"),
("Content-Type", "application/json; charset=UTF-8")]
opener.open(url, json.dumps(request))
然而,当我在Django中读取数据时,它已将其解析为QueryDict
:
Raw data received: <QueryDict: {u'{"info": "", ... 0002"}]}': [u'']}>
原始数据直接从request.data
获取,作为从urls.py
路由调用的函数。
从Android应用中发布相同类型的数据时,它可以正常工作。原始数据是一个字符串,可以从JSON中正确解析。
答案 0 :(得分:0)
正如@dhke在评论中所说,问题是urllib2
默认使用application/x-www.form-urlencoded
。在线快速搜索给了我这段代码:
r = urllib.Request(url, data=json.dumps(request), headers={..})
urllib2.urlopen(req)
按预期工作。