当我使用以下
发布帖子请求时curl -i -d "username=rock&password=rock" http://my_VM_IP/api/1.1/json/my_login/
它生成所需的响应,生成这样的标记(删节):
HTTP/1.1 200 OK
Date: Mon, 22 Oct 2012 08:37:39 GMT
Vary: Authorization,Accept-Language,Cookie,Accept-Encoding
Content-Type: text/plain
Transfer-Encoding: chunked
OK{"success": {"my_token": "required_token"}}
但是当我尝试使用相同的标题时:
curl -i -H "Content-Type:application/json" -d "username=rock&password=rock" http://my_VM_IP/api/1.1/json/my_login/
它给了我以下错误:
HTTP/1.1 400 BAD REQUEST
Date: Mon, 22 Oct 2012 11:12:04 GMT
Vary: Authorization,Accept-Language,Cookie,Accept-Encoding
***Content-Type: text/plain***
Content-Language: en-us
Connection: close
Transfer-Encoding: chunked
Bad Request
我不明白为什么会这样。此外 为什么内容类型显示文字/简单 ,我也尝试查看其他问题,如Why Setting POST Content-type:"Application/Json" causes a "Bad Request" on REST WebService?。它也解决了我遇到的同样问题。在答案之后,我尝试以各种格式提供数据
{"username":"rock", "password":"rock"}
但没有成功。提前谢谢。
答案 0 :(得分:3)
使用-H "Content-Type:application/json"
,您要为请求设置Content-Type
标头。 响应仍将返回您的视图要求返回的内容。
要返回Content-Type application/json
的回复,请按以下方式使用:
import json
from django.http import HttpResponse
def json_response(return_vars):
'JSON-encodes return_vars returns it in an HttpResponse with a JSON mimetype'
return HttpResponse(json.dumps(return_vars), content_type = "application/json")
#Usage: return json_response({'admin_token': admin_api_token.token})
答案 1 :(得分:2)
你很接近,但是你需要通过curl
:
curl -i -H "Content-Type:application/json" -d '{"username":"rock", "password":"rock"}'
("password","admin"
应为"password":"admin"
)
如果这不起作用,请尝试:
curl --dump-header - -H "Accept:application/json" -H "Content-Type:application/json" -X POST --data '{"username": "admin", "password": "admin"}' http://my_VM_IP/api/1.1/json/my_login/
答案 2 :(得分:0)
设置curl命令的-H
参数时,指定请求的内容类型。您在响应中看到的响应的内容类型在服务器上设置。在WSGI应用程序中,您需要手动指定'content-type'
和'content-length'
。一些框架提供了返回JSON响应的实用方法(例如,Flask中的jsonify
方法)。