web-dev-qa-db-ja.com

このAPIは、フォームでエンコードされた入力の解析をサポートしていません

エンドポイントにデータを送信しようとしましたが、データサイズが大きすぎると表示されたため、メソッドをPOSTに変更し、エラーを受け取りました:

This API does not support parsing form-encoded input.

次に、タイプをapplication/jsonに変更しましたが、まだpostがあり、次のようになっています。

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

大量のデータ、つまり2730バイトをエンドポイントに送信し、それを適切に処理させるための最良の方法は何ですか?私の場合、問題のフィールドはテキストタイプです。これは、AppEngineが文字列に保持するための500文字の制限を超えているためです。

また、多くのことと同様に、これは私のローカルマシンでうまく機能し、ライブアプリエンジンインスタンスでのみこのエラーが発生します。

ありがとう!

21
Shaun

問題が関連しているかどうかはわかりませんが、「このAPIはフォームでエンコードされた入力の解析をサポートしていません」というメッセージを受け取りました。 curlを使用して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 Cloudエンドポイントは、このコンテンツタイプを受け入れません。

コンテンツタイプを含めるようにcurl呼び出しを変更すると、次のように機能しました。

curl -X POST -d '{"name": "Foo"}' --header "Content-Type: application/json" http://foo.appspot.com/_ah/api/foo/1/endpoint
31
Greg