2017-08-17 146 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

那么如何改变答案,因为它是错的? –