How to use PATCH verb with curl

后端 未结 5 634
旧时难觅i
旧时难觅i 2020-12-04 18:54

I am trying to make a PATCH call to a server. I am using the following command:

curl --data status=closed -X PATCH https://api.viafoura.com/v2/dev.viafoura.         


        
相关标签:
5条回答
  • 2020-12-04 19:21

    An alternative way is as follow, this is through a POST call though

    curl --data status=closed https://api.viafoura.com/v2/dev.viafoura.com/pages/7000000043515?verb=PATCH 
    

    I am guessing this is not a general way and only applies to this specific instance.

    0 讨论(0)
  • 2020-12-04 19:32

    This is something which worked for me in my sample app.

    curl --data 'id=57&equipment_type_name=57 edited' -X PATCH http://localhost:5009/equipment-type/update
    
    {
      "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
            }
          ]
        }
      }
    }
    
    0 讨论(0)
  • 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 http://127.0.0.1:8000/api/v1/resource_uri/pk/
    

    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.

    0 讨论(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.

    0 讨论(0)
  • 2020-12-04 19:41

    This is the format you should use:

    curl --request PATCH https://api.viafoura.com/v2/dev.viafoura.com/pages/7000000043515?status=closed
    

    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 "https://api.viafoura.com/v2/dev.viafoura.com/users/login?password=TeNn!sNum8er1&email=novak@example.com"
    

    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.

    0 讨论(0)
提交回复
热议问题