How to pass payload via JSON file for curl?

Solution 1:

curl sends POST requests with the default content type of application/x-www-form-urlencoded. If you want to send a JSON request, you will have to specify the correct content type header:

$ curl -vX POST http://server/api/v1/places.json -d @testplace.json \
--header "Content-Type: application/json"

But that will only work if the server accepts json input. The .json at the end of the url may only indicate that the output is json, it doesn't necessarily mean that it also will handle json input. The API documentation should give you a hint on whether it does or not.

The reason you get a 401 and not some other error is probably because the server can't extract the auth_token from your request.

Solution 2:

To clarify how to actually specify a file that contains the JSON to post, note that it's with the @ sign as shown in the OP

e.g. a typical post to a local .NET Core API:

curl -X POST https://localhost:5001/api -H "Content-Type: application/json" -d @/some/directory/some.json