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
后缀添加到主机名。 PAGE
、SERVER
是什么?
问题是我有几天没有改变任何东西。 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 一起工作正常