我有一个 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 命令,以删除 ASP 代码中的 System.Web.Script.Serialization.JavaScriptSerializer
不需要的一些转义引号,并且将 HTTP 消息放在单独的行中并将其发送到控制台(以便我可以检查转义的引号是否正确)。该字符串看起来是正确的,但是,这是让我头疼的一点,单独声明 HTTP 消息的行为使它起作用! IE。此代码有效:
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错误400。请求谓词无效
:
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();
这太疯狂了。我现在有了工作代码,但我很感兴趣;为什么第二个代码块会失败而第一个代码块会成功?
最佳答案
当我在浏览器中发出您的原始 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]}]
所以你可以尝试一下.
话虽如此,我对你的后续问题没有任何解释。这些对我来说看起来一模一样。那是什么编程语言?
关于asp.net - 从 Azure 上的 ASP 返回到 Arduino 的 HTTP 动词无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13866642/