2010-09-09 746 views
15

我想将信息发布到我创建和托管的Web项目上的API。我不确定HTTP POST请求的确切格式是什么。每次我尝试使用带有“无效动词”的消息来获取HTTP 400错误。使用Arduino发出http POST请求

示例代码:

byte server[] = {"our IP"} 
.. 
.. 

client(server, 80) 
.. 
.. 
client.println("POST /Api/AddParking/3"); 

它连接到没有任何问题提供的IP地址,但我回来在上面提到的HTTP错误代码400,我不知道我应该包括POST后的HTTP版本或Content-Length或任何其他信息。

回答

2

发送手工制作的HTTP数据包可能有点棘手,因为它们对使用的格式非常挑剔。如果您有时间,我强烈建议您通读HTTP protocol,因为它解释了所需的语法和字段。特别是你应该看看第5节“请求”。

关于您的代码,您需要在POST URI后面指定HTTP版本,我相信您还需要指定“主机”标头。最重要的是,您需要确保每行末尾都有回车换行符(CRLF)。所以,你的数据包应该看起来像这样:

POST /Api/AddParking/3 HTTP/1.1 
Host: www.yourhost.com 
27

原来的问题已经回答了,但仅供通过谷歌路过的人参考;这里是一个更完整的例子,如何将数据发布到带有Arduino的网络服务器:

IPAddress server(10,0,0,138); 
String PostData = "someDataToPost"; 

if (client.connect(server, 80)) { 
    client.println("POST /Api/AddParking/3 HTTP/1.1"); 
    client.println("Host: 10.0.0.138"); 
    client.println("User-Agent: Arduino/1.0"); 
    client.println("Connection: close"); 
    client.print("Content-Length: "); 
    client.println(PostData.length()); 
    client.println(); 
    client.println(PostData); 
} 
+2

client.println(PostData.length()); *缺少't'* – F481 2013-05-23 08:06:42