2013-10-09 10 views
12

を解析サポートしていない私は、エンドポイントにデータを送信しようとしたが、それはデータサイズが大きすぎると言ったので、私はPOSTにする方法を変更し、エラーを受け取った:このAPIは、フォームエンコードされた入力

This API does not support parsing form-encoded input. 

エンドポイントに2730バイト、すなわち

{ 
"error": { 
    "errors": [ 
    { 
    "domain": "global", 
"reason": "parseError", 
    "message": "Parse Error" 
} 
], 
    "code": 400, 
"message": "Parse Error" 
} 
} 

大量のデータをポストするための最良の方法は何であり、それはそれを処理があります。次の私はまだポストで、今私が取得しています、アプリケーション/ JSONにタイプを変更しました正しく?私の場合、問題のフィールドはText型で、App Engineが文字列に保持する文字数は500文字を超えています。

また、これは多くの場合と同じように、ローカルマシンではうまくいきますが、ライブアプリケーションエンジンインスタンスでのみこのエラーが発生します。

ありがとうございます!

+0

を文字列がデータストアエンティティで許可され、ほぼ完全な1メガバイトことができます(キーと他には何のためのスペースを残しておく必要があります) 。入力を保持しない場合は、要求に32MBの文字列を受け入れることができます。 – bossylobster

+0

@bossylobster私が気づいているのは、エンティティタイプがエンドポイントにある場合、ポスト上でJSONオブジェクトを取得しますが、StringやLongなどの名前付きプロパティのみを持つ場合は、追加する必要がありますそれをURLに追加します。 APIエンドポイントを定義してJSONを使用/取るように強制する場合は、JSONを標準化したり、より多くのコントロールを与える方がよいと思います。 – Shaun

+0

定義による名前付きプロパティは、パスパラメータとして終了します。ただし、パラメータ名の衝突は許可されているため、本体でも定義できます。 – bossylobster

答えて

21

問題が関連しているが、「このAPIはフォームエンコードされた入力の解析をサポートしていません。私はこのようなPOSTメッセージを送信するためにカールを使用しようとしたときにエラー:

curl -X POST -d '{"name": "Foo"}' http://foo.appspot.com/_ah/api/foo/1/endpoint 

問題は、私は、コンテンツタイプを設定していませんでしたということでした。 content-Type:application/x-www-form-urlencodedをコマンドラインで指定していない場合は、それをPOSTします。 Googleクラウドエンドポイントはこのコンテンツタイプを受け入れません。

私はコンテンツタイプを含めるようにカール呼び出しを変更した場合、それが働いた:

curl -X POST -d '{"name": "Foo"}' --header "Content-Type: application/json" http://foo.appspot.com/_ah/api/foo/1/endpoint 
関連する問題