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.

如果我尝试HEADPOST代替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();

那是疯了。我现在有工作代码,但我很感兴趣;为什么第二个代码块会失败而第一个代码块会成功?

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 回答