2

以下を使用してPOSTリクエストを行う場合

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

なぜこれが起こるのかわかりません。また、content-Typeにtext / plainが表示されるのはなぜですか。また、 POST Content-type: "Application/Json"を設定するとRESTWebServiceで"BadRequest"が発生する理由などの他の質問も調べてみました。。また、私が抱えているのと同じ問題にも対処します。答えに続いて、私はさまざまな形式でデータを提供しようとしました

{"username":"rock", "password":"rock"} 

しかし、成功しませんでした。前もって感謝します。

4

3 に答える 3

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})
于 2012-10-22T12:02:53.383 に答える
2

あなたは近くにいましたが、JSON形式で送信する必要があります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/
于 2012-10-22T11:39:31.340 に答える
0

-Hcurlコマンドのパラメータを設定するときは、リクエストのコンテンツタイプを指定します。応答に表示される応答のコンテンツタイプは、サーバーに設定されます。'content-type'WSGIアプリケーションでは、手動で指定する必要があります'content-length'。一部のフレームワークは、JSON応答を返すユーティリティメソッドを提供します(たとえば、jsonifyFlaskのメソッド)。

于 2012-10-22T12:07:07.140 に答える