値の格納と取得という単純な作業を行う 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 番目のコード ブロックが失敗し、最初のコード ブロックが成功するのはなぜですか?