0

値の格納と取得という単純な作業を行う ASP サイトがあります。これは、サイトを使用して値を保存するための URL の例です。

http://oneurloranother.cloudapp.net/default.aspx?store=[{"name":"timsplate","values":[1,2,3,4]},{"name":"miwasplate","values":[2,1,4,3]}]

正常に動作するブラウザでは、データが保存されます。しかし、Arduinoからコードを呼び出したいです。私はArduino wifiライブラリのサンプルから適応したボイラープレートコードをかなり使用しています:

  client.println("GET /default.aspx?store=[{\"name\":\"timsplate\",\"values\":[1,2,3,4]},{\"name\":\"miwasplate\",\"values\":[2,1,4,3]}] HTTP/1.1");
  client.println("Host:oneurloranother.cloudapp.net");
  client.println("Connection: close");
  client.println();

しかし、サーバーから返される応答は次のとおりです。

HTTP Error 400. The request verb is invalid.

HEADまたはPOST代わりに試しGETても、同じエラーが表示されます。ペイロードを見逃して、このコードを使用するだけの場合:

  client.println("GET /default.aspx HTTP/1.1");
  client.println("Host:oneurloranother.cloudapp.net");
  client.println("Connection: close");
  client.println();

次に、応答は素晴らしいです - 要求されたページの HTML。

誰が私が間違っているのかを見ることができますか?

==========編集==========

わかりました、これは頭が痛いです。Arduino フォーラムから他の提案があり、HTTP コマンドを書き直してSystem.Web.Script.Serialization.JavaScriptSerializer、ASP コードで不要なエスケープされた引用符をいくつか削除し、HTTP メッセージを別の行に入れ、コンソールに送信しました (そのため、エスケープされた引用符が正しいことを確認できたこと)。文字列は正しいように見えますが、これが少し頭を悩ませているのですが、HTTP メッセージを個別に宣言することで機能します! つまり、このコードは機能します:

  String httpMssg = "GET /default.aspx?store=[{name:\"timsplate\",values:[1,2,3,4]},{name:\"miwasplate\",values:[2,1,4,3]}] HTTP/1.1";
  client.println(httpMssg);
  client.println("Host: oneurloranother.cloudapp.net");
  client.println("Connection: close");
  client.println();

これにより、サーバーは次のように応答しますHTTP Error 400. The request verb is invalid

  client.println("GET /default.aspx?store=[{name:\"timsplate\",values:[1,2,3,4]},{name:\"miwasplate\",values:[2,1,4,3]}] HTTP/1.1");
  client.println("Host: oneurloranother.cloudapp.net");
  client.println("Connection: close");
  client.println();

それは気が狂っている。私は今、動くコードを持っていますが、私は興味をそそられます。2 番目のコード ブロックが失敗し、最初のコード ブロックが成功するのはなぜですか?

4

2 に答える 2

1

クエリ文字列の文字の多くは予約文字です。それらにパーセントエンコーディングを適用してみてください。多くの HTTP ライブラリにはそのための機能がありますがprintln、リクエストを送信するために使用しているため、自分で行う必要がある場合があります。

于 2012-12-13T19:15:20.497 に答える
1

ブラウザで元の URL を発行すると、このようにエスケープさhttp://oneurloranother.cloudapp.net/default.aspx?store=[{%22name%22:%22timsplate%22,%22values%22:[1,2,3,4]},{%22name%22:%22miwasplate%22,%22values%22:[2,1,4,3]}]れるので、試してみてください。

そうは言っても、あなたのフォローアップの質問については説明がありません。それらは私と同じように見えます。それは何のプログラミング言語ですか?

于 2012-12-14T19:58:12.213 に答える