带有JSON的Arduino Http Post

时间:2014-05-08 15:37:39

标签: json post arduino http-post

我正试图通过Arduino发布一个json数据。当我尝试这个code.ı将发送一个json数据与QueryString.Ifı尝试此代码服务器用错误的QueryString格式回答我。这意味着是我已连接到服务器,服务器获取了我的数据。

 if (client.connect(server, 80)) {
Serial.println("connected");
// Make a HTTP request:
client.println("POST /URL?query=jsondata HTTP/1.1");
client.println("Host: **.**.**.**");
client.println("Connection: close\r\nContent-Type: application/x-www-form-urlencoded");
client.print("Content-Length: ");
client.println(PostData.length());
client.println();
client.println(PostData);

}

但我的主要计划是使用querystring发送我的json数据。如果ı尝试此代码;

client.println("POST /URL?query={request:{Header:{Username:kullaniciAdi,Password:123456},Item:{Serial:ABC123QWE,Data:100, DateOn:23/11/1986 15:45:24}}} HTTP/1.1");

我收到HTTP错误400.请求格式错误。

任何人都有任何想法?

1 个答案:

答案 0 :(得分:1)

是的,您的URI包含空格,可能包含其他字符以混淆帖子请求的格式。您需要对这些字符进行编码。

据我所知,Arduino标准库不包含任何形式的urlEncode方法,这在其他语言和库中很常见,因此您必须创建自己的或寻找一个。

您的结果代码如下:

String request = "/URL?query={request:{Header:{Username:kullaniciAdi,Password:123456},Item:{Serial:ABC123QWE,Data:100, DateOn:23/11/1986 15:45:24}}}";
String encRequest = uriEncode(request); // need to write your own method for this...
String post = "POST " + encRequest + " HTTP/1.1");
client.println( post);

关于创建uriEncode函数的一些讨论在Arduino Forum上,并且似乎还有working method on hardwarefun.com