How to Use Patch Verb with Curl
I Am Trying to Make a Patch Call to a Server. I Am Using the Following Command: Curl --Data Status=Closed -X Patch Is This the Correct Way of Sending the Patch...
I am trying to make a PATCH call to a server. I am using the following command:
curl --data status=closed -X PATCH
Is this the correct way of sending the PATCH request? I am getting an error saying there is no status parameter set. I am guessing the --data is for POST request only and thus the server doesn't find the status parameter.
This is the response (FYI):
{"http_status":400,"error":"Parameter validation errors","validation_errors":{"status":{"error":"Request missing status parameter."}}}
You can find documentation about this service here.
6 Answers
This is the format you should use:
curl --request PATCH
That API seems to want the status parameter as a query parameter on the url, not part of the PATCH body.
At this point the server is going to return a 401 error: "You must be logged in to modify page settings." Assumedly you have to login first with something like this:
curl --request POST ""
I've used the credentials from their documentation in that example, which I figured would work on their dev server, but its currently returning an "Incorrect password" error.
If you have valid credentials, though, you should get back a session cookie which you can then use to authenticate your PATCH request.
I was trying to PATCH to a tastypie resource with a similar curl request. For me the problem was the data had to be passed in like so:
curl --data '{"field": "new_value"}' -X PATCH
Notice how what I pass to the data flag is inside of what looks like a dictionary passed as a string, rather than putting the param directly as in the question. Of course a param works too as already answered, but hopefully this helps some people.
For those who run it on Windows, with a complex patch expression for more than one property.
The following worked for me:
curl -X PATCH "" -H "Content-Type: application/json" -d [{"""op""":"""replace""","""value""":"""100""","""path""":"""/employmentEndSettings/daysLoginActive"""},{"""op""":"""replace""","""value""":"""retiree""","""path""":"""/employmentEndSettings/userRoleAfter"""}]
This is something which worked for me in my sample app.
curl --data 'id=57&equipment_type_name=57 edited' -X PATCH
{
"info": "Equipment type updation.",
"response": {
"status": "success",
"message": "updateEquipmentType",
"result": {
"data": [
[
{
"update_status": 1
}
],
{
"fieldCount": 0,
"affectedRows": 0,
"insertId": 0,
"serverStatus": 2,
"warningCount": 0,
"message": "",
"protocol41": true,
"changedRows": 0
}
]
}
}
}
Your command line should work. As you can see in the PATCH RFC5789, the HTTP request is similar what curl sends (use --trace-ascii to get to see the full curl communication). You might want to change the Content-Type (using --header).
The mentioned missing status parameter is probably referring to contents in the request-body. Your "status=closed" data is possibly not in the right format (JSON?) or it is incomplete.
An alternative way is as follow, this is through a POST call though
curl --data status=closed
I am guessing this is not a general way and only applies to this specific instance.