bashcurl

curl does not terminate after successful POST


I have created some curl command to send a POST to my server where I am listening on that port for input to trigger additional action. The command is the following (Just masked the URL):

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

I get the following output from curl:

About to connect() to example.com port 8885 (#0)

Trying 5.147.XXX.XXX...

Connected to example.com (5.147.XXX.XXX) port 8885 (#0)

POST / HTTP/1.1

User-Agent: curl/7.29.0

Host: example.com:8885

Accept: /

Content-Type: application/json

Content-Length: 40

upload completely sent off: 40 out of 40 bytes

However after that curl does not close the connection. Am I doing something wrong? Also on the server I only receive the POST as soon as I hit ctrl+c.


Solution

  • It sits there waiting for the proper HTTP response, and after that has been received it will exit cleanly.

    A minimal HTTP/1.1 response could look something like:

    HTTP/1.1 200 OK
    Content-Length: 0
    

    ... and it needs an extra CRLF after the last header to signal the end of headers.

    (and please drop the superfluous -X POST when you use -d)