79

我正在尝试对服务器进行 PATCH 调用。我正在使用以下命令:

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

这是发送 PATCH 请求的正确方法吗?我收到一条错误消息,说没有设置状态参数。我猜 --data 仅用于 POST 请求,因此服务器找不到状态参数。

这是响应(仅供参考):

{"http_status":400,"error":"Parameter validation errors","validation_errors":{"status":{"error":"Request missing status parameter."}}}

您可以在此处找到有关此服务的文档。

4

6 回答 6

116

这是您应该使用的格式:

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

该 API 似乎希望该status参数作为 url 上的查询参数,而不是 PATCH 正文的一部分。

此时服务器将返回 401 错误:“您必须登录才能修改页面设置。” 假设您必须先使用以下内容登录:

curl --request POST "https://api.viafoura.com/v2/dev.viafoura.com/users/login?password=TeNn!sNum8er1&email=novak@example.com"

我在该示例中使用了他们文档中的凭据,我认为这些凭据可以在他们的开发服务器上运行,但它当前返回“密码错误”错误。

但是,如果您有有效的凭据,您应该取回一个会话 cookie,然后您可以使用它来验证您的 PATCH 请求。

于 2013-05-08T16:19:44.050 回答
19

我试图用类似的 curl 请求修补到一个美味的资源。对我来说,问题是数据必须像这样传递:

curl --data '{"field": "new_value"}' -X PATCH http://127.0.0.1:8000/api/v1/resource_uri/pk/

请注意我传递给数据标志的内容是如何在看起来像作为字符串传递的字典的内部,而不是像问题中那样直接放置参数。当然,参数也可以像已经回答的那样工作,但希望这对某些人有所帮助。

于 2016-09-09T00:30:17.813 回答
3

对于那些在 Windows 上运行它的人,具有patch多个属性的复杂表达式。
以下对我有用:

curl -X PATCH "http://localhost:5001/tenants/test02" -H "Content-Type: application/json" -d [{"""op""":"""replace""","""value""":"""100""","""path""":"""/employmentEndSettings/daysLoginActive"""},{"""op""":"""replace""","""value""":"""retiree""","""path""":"""/employmentEndSettings/userRoleAfter"""}]
于 2021-05-26T20:46:36.283 回答
2

您的命令行应该可以工作。正如您在 PATCH RFC5789中看到的,HTTP 请求与 curl 发送的类似(使用--trace-ascii来查看完整的 curl 通信)。您可能想要更改 Content-Type(使用--header)。

提到的缺失状态参数可能是指请求正文中的内容。您的“状态=关闭”数据可能格式不正确(JSON?)或不完整。

于 2013-05-03T08:15:02.787 回答
2

这在我的示例应用程序中对我有用。

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
        }
      ]
    }
  }
}
于 2018-07-13T07:50:16.770 回答
-3

另一种方法如下,虽然这是通过 POST 调用

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

我猜这不是一般的方法,只适用于这个特定的实例。

于 2013-04-30T18:42:05.960 回答