2

現在、RESTful json API の作成をテストしています。その過程で、主に curl を介してデータを投稿して、リクエストを通じてログインできるかどうかをテストしています。ハッキングしてもどうすればいいのかわかりませんが、それは別の問題です。

次の POST リクエストをアプリに送信しています。

curl -X POST http://localhost:6543/users/signin -d '{"username":"a@a.com","password":"password"}' 

そして、リクエストに含まれるデータを見ると、出力は非常に奇妙です。

ipdb> self.request.POST
MultiDict([('{"username":"a@a.com","password":"password"}', '******')])
ipdb> self.request.POST.keys()
['{"username":"a@a.com","password":"password"}']
ipdb> self.request.POST.values()
[u'']

それで、私のjsonオブジェクトを文字列キーとして、空の文字列をその値として持つMultiDictになりますか?! それは正しくないようです。

json 宣言で単一引用符を削除すると、次のようになります。

ipdb> self.request.POST
MultiDict([('username:a@a.com', u'')])

私のデータが正しく投稿されない理由を知っている人はいますか?

アップデート:

明確にするために、私が使用しているヘッダーは実際には application/x-www-form-urlencoded です。

ipdb> self.request.headers['CONTENT-TYPE']
'application/x-www-form-urlencoded'

私が見つけたのは、何らかの理由で、次の操作を行うとリクエストライブラリが機能することです。

In [49]: s.post('http://localhost:6543/users/signin', data=[('username', 'a@a.com'), ('password', 'password')], headers={'content-type': 'application/x-www-form-urlencoded'})
Out[49]: <Response [200]>

ただし、curl で期待どおりに動作しないという事実は、依然として厄介です。

4

1 に答える 1

4

アップロードしようとしているコンテンツ タイプがわかりません - application/json または application/x-www-form-urlencoded。request.POST後者のオプションでのみ機能しrequest.json_body、json リクエスト本文からのデータを解析するために使用されます。

明確にするために、application/x-www-form-urlencoded は、Web ブラウザーがフォームを送信するときに使用される形式です。のようなキー/値形式ですa=b&c=d&e=f。そこから、キー、、およびrequest.POSTを含む辞書が含まれていることが期待できます。ace

于 2013-09-20T03:15:43.527 に答える