我试图使用WifiESP库(https://github.com/bportaluri/WiFiEsp)发出RESTful POST请求。我能够用curl成功地完成请求,但使用Arduino和ESP始终会出现错误。我怀疑这个问题与库所需的POST请求的手动格式有关,但我没有看到任何错误。在这里我消毒代码:使用WifiESP库,使用ESP8266在arduino上发出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 -X POST -H "Content-Type: application/json" -d 'Some JSON' http://things.ubidots.com/some/uri
夫妇的事情。我注意到,当你使用'println'函数时,库附加'\ r'和'\ n'而不是'\ n'。尝试手动操作'\ n's并使用'print'功能。如果不这样做,请将整个内容打印到Serial上,并将其与卷曲文章的wireshark trace进行比较。 – leetibbett
@leetibbett感谢您的回复。 '\ r \ n'最终不是问题,但它确实让我看到了HTTP协议文档,这帮助我找到了其他几个问题。 –