如何使用卷曲的PATCH动词

时间:2013-04-30 18:29:12

标签: curl patch

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

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

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

这是回复(FYI):

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

您可以找到有关此服务的文档here

6 个答案:

答案 0 :(得分:77)

这是您应该使用的格式:

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

使用-X似乎无法发送PATCH请求 - 您必须使用--request PATCH。此外,该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"

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

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

答案 1 :(得分:6)

我尝试使用类似的curl请求修补到tastypie资源。对我来说问题是数据必须像这样传递:

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

注意我传递给数据标志的内容是什么看起来像是作为字符串传递的字典,而不是直接将param放在问题中。当然,一个参数也可以解决,但希望这有助于一些人。

答案 2 :(得分:2)

您的命令行应该有效。正如您在PATCH RFC5789中看到的那样,HTTP请求与curl发送的类似(使用--trace-ascii来查看完整的curl通信)。您可能想要更改内容类型(使用--header)。

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

(您似乎打算包含API的链接,但那里没有链接!)

答案 3 :(得分:0)

这对我的示例应用程序很有效。

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 } ] } } }

答案 4 :(得分:0)

对于那些在 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"""}]

答案 5 :(得分:-2)

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

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

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