gpt4 book ai didi

rest - 使用 WifiESP 库对带有 ESP8266 的 arduino 进行 POST 请求

转载 作者:行者123 更新时间:2023-12-05 02:19:48 25 4
gpt4 key购买 nike

我正在尝试使用 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

最佳答案

经过一些实验,这里是多个问题的解决方案。

  1. JSON 对象的格式不正确。不接受单引号,所以我需要转义双引号。
  2. 主机在 POST 请求中不需要“http://”; POST 是一种 HTTP 方法。
  3. sizeof() 方法返回内存中变量的大小(以字节为单位)而不是字符串的长度。它需要替换为 .length()。
  4. 将整数附加到字符串需要强制转换。

这是修改后的代码:

if (client.connect(server, 80)) {
Serial.println("Connected to server");
// Make the HTTP request
int value = 2.5; // an arbitrary value for testing
String content = "{\"JSON_key\": " + String(value) + "}";
client.println("POST /some/uri HTTP/1.1");
client.println("Host: things.ubidots.com");
client.println("Accept: */*");
client.println("Content-Length: " + String(content.length()));
client.println("Content-Type: application/json");
client.println();
client.println(content);
}

关于rest - 使用 WifiESP 库对带有 ESP8266 的 arduino 进行 POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41354652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com