2017-08-17 4 views
2

curlコマンドを作成して、そのポートで入力を待機しているサーバーにPOSTを送信して、追加アクションをトリガーしました。POSTが成功するとcurlが終了しない

()を接続するのに約example.comポート8885(#0)

に:私はカールから次の出力を得る

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

:コマンドが(ちょうどURLをマスクし)以下であります5.147.XXX.XXXをしようと

... example.comに接続

(5.147.XXX.XXX)ポート8885(#0)

POST/HTTP/1.1

のUser-Agent:example.com:8885

受け入れ:/

のContent-Type:アプリケーション/ JSON

たContent/7.29.0

ホストカール長さ:40

アップロード完了:40バイト中40:

しかし、その後、カールは接続を閉じません。私は何か間違っているのですか?また、サーバー上で私はCtrl + cを押すとすぐにPOSTを受け取ります。

+0

は、同じ問題を思い付く、(NodeRedを経由して、正しいHTTPレスポンスを送信するために管理していませんでした)最後に私のために働いたコマンドを見つけてください以下:
'BODY =「{\」 \ "} \"} "" '' '' '' '' ''
'echo -ne" POST http://example.com:PORT/ HTTP/1.0のように、「IrgendeinText \」:\ "IrgendeinText \"、\ "EineAndereProperty \" \ r \ nホスト:example.com:PORT\r\nContent-Type:application/json \ r \ nContent-Length:$ {#BODY} \ r \ n認証:トークン{APIキー} \ r \ n \ r \ n $ {BODY} "| nc -i 3 example.com PORT' –

答えて

3

:-)あなたの問題を解決するかどうか私に教えてください。

最小限の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)完了後 送信者が接続をクローズしようとしていることを示しています。

それはそれが適切なHTTPレスポンスを待ってそこに座って、その後、それが正常に終了します受信されている

+0

いいえ、「Connection:close」は、接続が完了した後で接続を閉じることを意味しますが、この場合はまだ完了していないため待機します。 –

+0

: – Polentino

+1

それは間違っているので、答えを変えるのはどうですか? –

関連する問題