【发布时间】:2017-05-12 07:12:13
【问题描述】:
我正在尝试使用 WifiESP 库 (https://github.com/bportaluri/WiFiEsp) 发出 RESTful POST 请求。我能够使用 curl 成功发出请求,但使用 Arduino 和 ESP 时始终会出错。我怀疑问题与库所需的 POST 请求的手动格式有关,但我没有发现任何问题。这是我清理过的代码:
if (client.connect(server, 80)) {
Serial.println("Connected to server");
// Make a HTTP request
String content = "{'JSON_key': 2.5}"; // some arbitrary JSON
client.println("POST /some/uri HTTP/1.1");
client.println("Host: http://things.ubidots.com");
client.println("Accept: */*");
client.println("Content-Length: " + sizeof(content));
client.println("Content-Type: application/json");
client.println();
client.println(content);
}
我得到的错误(通过串行监视器)是这样的:
Connected to server
[WiFiEsp] Data packet send error (2)
[WiFiEsp] Failed to write to socket 3
[WiFiEsp] Disconnecting 3
我成功的 curl 请求如下所示:
curl -X POST -H "Content-Type: application/json" -d 'Some JSON' http://things.ubidots.com/some/uri
【问题讨论】:
-
几件事。我注意到,当您使用
println函数时,库会同时附加\r和\n而不仅仅是\n。尝试手动执行\ns 并使用print函数。如果这样做不行,请将整个内容打印到 Serial 并将其与 curl 帖子的wireshark 跟踪进行比较。 -
@leetibbett 感谢您的回复。
\r\n最终不是问题,但它确实让我查看了 HTTP 协议文档,该文档帮助我发现了其他几个问题。
标签: rest arduino http-post esp8266