【问题标题】:Arduino POST ERROR bad Request-Line `'Arduino POST ERROR 错误请求行`'
【发布时间】:2013-09-28 21:34:39
【问题描述】:

我正在制作一个 Web 应用程序来托管从 Arduino 发布的 JSON 数据,以进行散列处理并存储在数据库中。

我遇到了从 Arduino 向 Web 应用程序发送 POST 请求的问题,但我无法解决问题。

收到的错误:

[28/Sep/2013:15:43:01 CDT] "POST /json HTTP/1.1" 200 0
- -> /json

[2013-09-28 15:43:06] ERROR bad Request-Line `'.

[28/Sep/2013:15:43:06 CDT] "" 400 0

Arduino POST:

if (client.connect(server, 4567)) {
 Serial.println("connected");
 // Make a HTTP request:
 client.println("POST /json HTTP/1.1");
 client.println("User-Agent: Arduino");
 client.println("Host: localhost:4567");
 client.print("Accept: *"); client.print("/"); client.println("*");
 client.println("Content-Length: 15");
 client.println("Content-Type: application/x-www-form-urlencoded");
 client.println("");
 client.println("{\"plot\":\"85.1\"}");
 client.println("");
} 

我正在将 Ruby 与 Sinatra 一起用于 Web 应用程序。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
 <HEAD><TITLE>Bad Request</TITLE></HEAD>
 <BODY>
 <H1>Bad Request</H1>
 bad Request-Line `'.
 <HR>
 <ADDRESS>
 WEBrick/1.3.1 (Ruby/1.9.3/2013-06-27) at
 localhost:4567
 </ADDRESS>
 </BODY>
</HTML>

任何帮助将不胜感激,在此先感谢!

【问题讨论】:

  • 你不需要最后一个 client.println("")。不确定这是否足以导致您看到的错误。
  • 这确实摆脱了一些疯狂的 HTTP 响应字符,但它仍然给出错误。我将在原始帖子中添加 HTTP 响应。谢谢!

标签: ruby json sinatra arduino http-post


【解决方案1】:

这里的问题是 Content-Length 值错误 - 您发送的数据比这更多。

如果您删除了最后一个 client.println("");,因为它不需要,并将 Content-Length 增加到 16 或 17(取决于 println 添加的换行符),那么它可以工作。

更便携的方法是在String 对象中构建您要发布的数据,然后根据其.length() 设置Content-Length

【讨论】:

    猜你喜欢
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 2022-01-04
    • 1970-01-01
    • 2018-11-29
    • 2018-04-10
    • 1970-01-01
    相关资源
    最近更新 更多