我正在尝试让我的 Arduino(带有以太网屏蔽)将带有 JSON 正文的 POST 请求发送到我的本地托管服务器。
我正在使用ArduinoJson(版本 6)和以太网库。
我正在尝试使用 ArduinoJSON 的 JSON 创建功能向本地端点(托管在我的笔记本电脑上)/routes/test发送POST请求。使用该库,我创建了一个名为doc的 DynamicJsonDocument并向其写入属性。然后我使用serializeJson将文档的数据写入 POST 请求。
我的问题:我向端点/routes/test发出 POST 请求,但是当我 console.log 正文时,它显示为空。似乎我的帖子请求中没有包含任何正文
在请求对象上使用utils.inspect
,我得到这个:
身体: {}
这是语法问题还是我的方法存在根本问题?任何帮助将不胜感激!!。
#include <ArduinoJson.h>
#include <Ethernet.h>
#include <SPI.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 10, 0, 0, 177 };
byte server[] = { x, x, x, x };
EthernetClient client;
void setup() {
//Initialize Ethernet and account for 1s delay
Ethernet.begin(mac, ip);
Serial.begin(9600);
delay(1000);
Serial.println("connecting...");
if (client.connect(server, 5000)) {
Serial.println("connected");
} else {
Serial.println("connection failed");
}
//Create JSON doc and write a "name" attribute
const size_t capacity = JSON_OBJECT_SIZE(1);
DynamicJsonDocument doc(capacity);
doc["name"] = "some random name";
//POST request
Serial.println("Begin POST Request");
client.println("POST /routes/test");
client.println();
client.println("Host: x.x.x.x");
client.println("User-Agent: Arduino/1.0");
client.println("Content-Type: application/json;charset=UTF-8");
client.println("Connection: close");
client.print("Content-Length: ");
client.println(measureJson(doc));
//This works like client.println, but prints doc to client
serializeJson(doc, client);
//To let me know that request has been completed
Serial.println("Sent Get Request");