如何使用curl的PATCH动词

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

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

这是发送PATCH请求的正确方法吗? 我得到一个错误,说没有状态参数集。 我猜测–data只是POST请求,因此服务器没有find状态参数。

这是答复(FYI):

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

你可以在这里find关于这个服务的文档。

这是你应该使用的格式:

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

使用-X在发送PATCH请求方面似乎不起作用 – 您必须使用--request PATCH 。 此外,该API似乎希望status参数作为url上的查询参数,而不是PATCH主体的一部分。

此时服务器将返回401错误:“您必须login才能修改页面设置。” 假设你必须先login这样的东西:

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

我在这个例子中使用了他们文档中的证书,我认为它们可以在他们的开发服务器上工作,但是它当前返回一个“不正确的密码”错误。

如果您拥有有效的凭证,那么您应该取回一个会话cookie,然后您可以使用它来validation您的PATCH请求。

你的命令行应该工作。 正如你可以在PATCH RFC5789中看到的那样 ,HTTP请求与curl发送的类似(使用–trace-ascii来查看完整的curl通信)。 您可能需要更改内容types(使用 – 标题 )。

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

(你似乎打算包括一个API的链接,但没有链接!)

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

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

注意我传递给数据标志的内容是如何作为一个string传递的字典,而不是像问题中那样直接放置参数。 当然,一个参数也可以像已经回答的那样工作,但是希望这可以帮助一些人。

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

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

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