HTTP GET 给出 400 错误请求(telnet,arduino)

Posted

技术标签:

【中文标题】HTTP GET 给出 400 错误请求(telnet,arduino)【英文标题】:HTTP GET gives 400 bad request (telnet, arduino) 【发布时间】:2014-08-18 13:16:17 【问题描述】:

对于一个学校项目,我正在构建一个基于 Arduino 的小型气象站。该站将其数据发送到 php 页面(使用 CC3000),该页面将其放入 mysql 数据库。我几天前工作的代码现在不知何故停止工作。 问题是我从服务器收到 400 错误请求。我使用的代码如下

while (!client.connected())
    Connect();
  
  client.fastrprint(F(" GET "));
  client.fastrprint(PAGE);
  client.fastrprint(F("?sensor="));
  client.fastrprint(sensor);
  client.fastrprint(F("&&unit="));
  client.fastrprint(unit);
  client.fastrprint(F("&&value="));
  client.fastrprint(charBuffer);
  client.fastrprint(F("&&pass="));
  client.fastrprint(F(" HTTP/1.1\r\n"));
  client.fastrprint(F("Host: ")); 
  client.fastrprint(SERVER); 
  client.fastrprint(F(":80\r\n"));
  client.fastrprint(F("\r\n"));
  client.println();

现在大部分代码来自 adafruit 的示例函数。奇怪的是,当我使用 telnet 发送相同的请求时,我也收到了 HTTP 400 错误请求。但是当我使用浏览器请求 URL 时,PHP 页面会接受数据并将其放入我的数据库中。 这是我在 telnet 中使用的命令。

GET /weer/add.php?sensor=DHT&&unit=C&&value=99.99&&pass= HTTP:/1.1
Host:www.---.nl

谁能帮我弄清楚我的请求有什么问题?

如果有帮助,服务器会运行 nginx 1.7.0

【问题讨论】:

你和几天前相比有什么变化?为什么要使用双&? Nginx 的访问日志中的请求是什么样的?代码有所不同 - 您将 :80 后缀添加到主机名。 PAGESERVER 是什么? 问题是我有几天没有改变任何东西。 PAGE 是 /weer/add.php 而 SERVER 是网站的地址,所以 www.sitename.nl 我今天添加了 :80,因为这里有人建议这样做。它不应该有所作为。抱歉,我无权访问访问日志 【参考方案1】:

所以,我更改了代码,以便它使用格式字符串的缓冲区来编译字符串。然后使用 client.println 发送此缓冲区。最后,我仍然向我的服务器发送完全相同的消息,但现在它可以工作了。我猜 client.fastrprint 搞砸了。

String buffer = "GET ";
  buffer += PAGE;
  buffer += "?sensor=";
  buffer += sensor;
  buffer += "&&unit=";
  buffer += unit;
  buffer += "&&value=";
  buffer += charBuffer;
  buffer += "&&pass=";
  buffer += " HTTP/1.1\r\n";
  buffer += "Host: ";
  buffer += SERVER;
  buffer += ":80\r\n\r\n";

  while (!client.connected())
    Connect();
  
  client.println(buffer);

【讨论】:

以上是关于HTTP GET 给出 400 错误请求(telnet,arduino)的主要内容,如果未能解决你的问题,请参考以下文章

尝试执行 PayPal 付款请求时出现 HTTP 400 错误。 (file_get_contents)

.net WCF GET HTTPS 400 错误请求,但与 Http 一起工作正常

spotify-web-api-node:authorizationCodeGrant()给出400 - 错误请求

HTTP 错误 400。请求主机名无效 - 改造

HTTP 请求失败! HTTP/1.1 400 错误请求

获取 HTTP/1.1 400 错误请求