2017-08-17 5 views
2

Ich habe einen curl-Befehl erstellt, um einen POST an meinen Server zu senden, wo ich diesen Port abhöre, um weitere Aktionen auszulösen. Der Befehl ist die folgende (einfach die URL maskiert):curl beendet nicht nach erfolgreichem POST

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

ich die folgende Ausgabe von curl erhalten:

Über() zu example.com Port 8885 (# 0)

verbinden

5.147.XXX.XXX Der Versuch ...

Verbunden mit example.com (5.147.XXX.XXX) Port 8885 (# 0)

POST/HTTP/1.1

User-Agent: curl/7.29.0

Host: example.com:8885

akzeptieren: /

Content-Type: application/json

Content- Länge: 40

Upload komplett gesendet aus: 40 von 40 Bytes

Allerdings schließt die Locke die Verbindung nicht. Mache ich etwas falsch? Auch auf dem Server erhalte ich nur den POST sobald ich ctrl + c drücke.

+0

Falls jemand anderes mit dem gleichen Problem aufkommt, unten finden Sie den Befehl, der für mich am Ende gearbeitet (nicht gelungen, eine korrekte HTTP-Antwort über NodeRed zu senden):
'BODY =„{\“ IrgendeinText \ ": \ "IrgendeinText \", \ "EineAndereProperty \": \ "Noch ein Text usw. \"}" '
' echo -ne POST“http://example.com:PORT/ HTTP/1.0 \ r \ nHost: example.com:PORT\r\nContent-Type: application/json \ r \ nContent-Length: $ {# BODY} \ r \ nAutorisierung: Token {API KEY} \ r \ n \ r \ n $ {BODY} "| nc -i 3 example.com PORT' –

Antwort

3

Es liegt für die richtige HTTP-Antwort dort warten, und danach wird es beendet sauber empfangen wurde.

HTTP/1.1 200 OK 
Content-Length: 0 

... und es muss eine zusätzliche CRLF nach dem letzten Header das Ende der Header zu signalisieren:

Eine minimale HTTP/1.1 Reaktion etwas aussehen könnte.

+0

Das macht Sinn, dann muss ich nur herausfinden, wie man richtig eine Antwort von NodeRed sendet, danke für den Hinweis –

2

Ich bin ein bisschen rostig auf diesem, aber nach section 6.1 of RFC7230, müssen Sie möglicherweise eine Connection: close Header hinzufügen. Zitiert Teil des Absatzes: wird

Die „close“ Anschlussmöglichkeit für einen Sender definiert , um zu signalisieren, dass diese Verbindung wird nach Abschluss der Reaktion geschlossen werden. Zum Beispiel

Connection: close 

entweder in der Anfrage oder die Antwort-Header-Feldern zeigen an, dass der Absender die Verbindung nach dem aktuell
Request/Response abgeschlossen ist (Abschnitt 6.6) schließen wird.

Lassen Sie mich wissen, ob es :-) Ihr Problem löst

+0

Nein, 'Connection: close' bedeutet nur, dass es die Verbindung schließt, nachdem es fertig ist, aber in diesem Fall wartet es, weil es noch nicht fertig ist ... –

+0

dang, zu rostig :( – Polentino

+1

Also wie wäre es mit der Änderung der Antwort, da es falsch ist? –