我正在尝试向一个非常简单的django服务器发送一个简单的帖子请求,并且无法解决为什么帖子数据没有出现在请求帖子字典中,而是出现在请求体中。
客户代码:
payload = {'test':'test'}
headers = {'Content-type': 'application/json','Accept': 'text/plain'}
url = "localhost:8000"
print json.dumps(payload)
r = requests.post(url,data=json.dumps(payload),headers=headers)
服务器代码:
def submit_test(request):
if request.method == 'POST':
print 'Post: "%s"' % request.POST
print 'Body: "%s"' % request.body
return HttpResponse('')
服务器上打印的内容是:
Post: "<QueryDict: {}>"
Body: "{"test": "test"}"
我玩过标题并将数据作为直字典发送,似乎没什么用。
有什么想法吗?谢谢!
答案 0 :(得分:7)
POST
字典仅包含在请求正文中发送的表单编码数据。 body
属性将请求的原始主体包含为字符串。由于您要发送json编码的数据,因此它只显示在原始body
属性中,而不显示在POST
中。
查看docs。
中的更多信息尝试使用表单编码数据,您还应该看到POST
字典中的值:
payload = {'test':'test'}
url = "localhost:8000"
requests.post(url, data=payload)
答案 1 :(得分:1)
您应该删除&#39;内容类型&#39;来自标题并使用默认值为&#39; multipart / form-data&#39;
response = client.post(
'/some_url/',
data={'post_key': 'some_value'},
# content_type='application/json'
)
如果您取消注释&#39; content_type&#39;数据只会在request.body
中答案 2 :(得分:1)
在标题中指定用户代理应该允许Django解释正文的原始数据并正确填充POST字典。以下应该有效:
payload = {'test': 'test'}
url = "http://localhost:8000"
headers = {'User-Agent': 'Mozilla/5.0'}
requests.post(url, data=payload, headers=headers)