我試圖使用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協議文檔,這幫助我找到了其他幾個問題。 –