2017-08-17 143 views
2

我已經創建了一些curl命令來發送POST到我的服務器,在那裏我正在偵聽該端口的輸入以觸發其他操作。命令如下(只是屏蔽的網址):成功開機後,curl不會終止

curl -v -H "Content-Type: application/json" -X POST -d "{\"Location\":\"Some Name\",\"Value\":\"40%\"}" http://example.com:8885/ 

我從捲曲以下的輸出:

關於連接()到example.com端口8885(#0)

嘗試5.147.XXX.XXX ...

連接到example.com(5.147.XXX.XXX)端口8885(#0)

POST/HTTP/1.1

的User-Agent:捲曲/ 7.29.0

主持人:example.com:8885

接受:/

內容類型:應用程序/ JSON

內容 - 長度:40

上傳完全發送:40個字節中的40個

但是之後,curl並沒有關閉連接。難道我做錯了什麼?同樣在服務器上,只要我點擊ctrl + c,我就會收到POST。

+0

萬一有人用同樣的問題,其他人來了,下面請找那到底爲我工作的命令(沒有設法送經NodeRed正確的HTTP響應):
'BODY =「{\」 IrgendeinText \「:\」IrgendeinText \「,\」EineAndereProperty \「:\」Noch ein Text usw. \「}」'
'echo -ne「POST http://example.com:PORT/ HTTP/1.0 \ r \ n主機:example.com:PORT\r\nContent-Type:application/json \ r \ n內容長度:$ {#BODY} \ r \ n授權:令牌{API密鑰} \ r \ n \ r \ n $ {BODY}「| nc -i 3 example.com PORT'' –

回答

3

坐在那裏等待合適的HTTP響應,並已接收後,它會完全退出。

一個最小的HTTP/1.1響應可能類似於:

HTTP/1.1 200 OK 
Content-Length: 0 

...它最後一個頭之後需要一個額外的CRLF信號標題的末尾。

+0

這是有道理的,那麼我只需要找出如何正確發送來自NodeRed的響應,感謝提示 –

2

我對此有點生疏,但根據section 6.1 of RFC7230,您可能還需要添加一個Connection: close標題。該段的一部分引用:

「關閉」連接選項用於在發送者的信號 該連接將在 響應完成後關閉定義。例如,

Connection: close 

在任一方請求或響應的報頭字段指示 發件人會關閉當前
請求/響應之後的連接完成(第6.6節)。

讓我知道,如果它解決您的問題:-)

+0

不,'Connection:close'只表示它在完成之後會關閉連接,但在這種情況下它會等待,因爲它尚未完成... –

+0

dang,太過生鏽了:( – Polentino

+1

那麼如何改變答案,因爲它是錯的? –