我有一个 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。
谁能看到我做错了什么?
========== 编辑 ==========
好吧,这让我头疼。System.Web.Script.Serialization.JavaScriptSerializer
我从 Arduino 论坛获得了一些其他建议,并重写了我的 HTTP 命令以删除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();
那是疯了。我现在有工作代码,但我很感兴趣;为什么第二个代码块会失败而第一个代码块会成功?