2017-09-12 205 views
0

我必須在C(Arduino - > Energia)身上發送一個POST,並提出請求,但未發送正文。在C中發送HTTP POST請求與身體Arduino

這裏是控制檯反饋:

將數據發送到服務器...

POST /溫度HTTP/1.1

主機:192.168.0.102

的Content-Length: 13

{value:'30'}

響應代碼:200 HTTP/1.1 200 OK

X-已啓動通過:快速

內容類型: 應用/ JSON;字符集= UTF-8

的Content-Length:28 ETag的:W/「1C-hvJwdxMoDderI2R105RV5ae/KRI」

日期:星期二,2017年9月12日11時04分22秒GMT

連接:保持-alive

{ 「信息」: 「下加入」

END

,這裏是在C(Arduino的 - >能源公司)的代碼:

if (client.connect(server, 3000)) { 

String request = String("POST ") + (String)END_POINT + " HTTP/1.1\r\n" + 
       "Host: " + server + "\r\n" + 
       "Content-Length: " + dataToSend.length() + "\n\n" + 
       dataToSend; 
client.print(request); 
Serial.println(request); 

String response = ""; 
while (client.connected()) {  
    response += client.readStringUntil('}'); 
} 
Serial.println(); 
Serial.print("Response code: "); 
Serial.println(response.substring(9, 12)); 
Serial.println(response); 
Serial.println("END"); 
} 

和JSON看起來像:

{ 
_id: "59b7b5169f699306290cacd2", 
timestamp: "2017-09-12T10:21:10.538Z", 
__v: 0 
}, 

所以

{值: '30'}

是不存在的。

+0

你這是什麼意思身體? – Billa

+0

'dataToSend'是一個字符串嗎?它是如何初始化的? – Lundin

+1

請閱讀[在什麼情況下,我可以添加「緊急」或其他類似的短語到我的問題,以獲得更快的答案?](/ meta.stackoverflow.com/q/326569) - 總結是,這不是這是解決志願者問題的理想方式,可能會對獲得答案產生反作用。請不要將這添加到您的問題。 – halfer

回答

0

在每個標題行之後,必須有一個回車符和一個新行字符。
而標題和身體之間需要是一個空行。

您需要更改以下行

"Content-Length: " + dataToSend.length() + "\n\n" + 

"Content-Length: " + dataToSend.length() + "\r\n\r\n" +