web-dev-qa-db-ja.com

curlでPATCH verbを使用する方法

サーバーに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."}}}

このサービスに関するドキュメントを見つけることができます こちら

51
sheidaei

これは、使用する必要がある形式です。

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

-Xを使用しても、PATCH要求を送信するという点では機能しないようです。--request PATCHを使用する必要があります。また、そのAPIはstatusパラメーターをPATCH本体の一部ではなく、URLのクエリパラメーターとして必要とするようです。

この時点で、サーバーは401エラーを返します。「ページ設定を変更するには、ログインする必要があります。」まず、次のようなもので最初にログインする必要があります:

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

その例では、ドキュメントからの資格情報を使用しましたが、これは開発サーバーで動作すると考えられていましたが、現在「不正なパスワード」エラーを返しています。

ただし、有効な資格情報がある場合は、PATCH要求の認証に使用できるセッションCookieを取得する必要があります。

77

同様のcurl要求でtastypieリソースにパッチを当てようとしていました。私にとって問題は、データを次のように渡す必要があることでした。

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

データフラグに渡すものが、質問のように直接パラメータを置くのではなく、文字列として渡される辞書のように見えるものの中にあることに注意してください。もちろん、すでに答えたようにパラメーターも機能しますが、これが一部の人に役立つことを願っています。

6
Nick Brady

コマンドラインが機能するはずです。 PATCH RFC5789 でわかるように、HTTPリクエストはcurlが送信するものと似ています( -trace-ascii を使用して完全なcurl通信を確認します)。 Content-Typeを変更することもできます( -header を使用)。

前述の欠落状態パラメーターは、おそらく要求本体の内容を参照しています。 「status = closed」データが正しい形式(JSON?)でないか、不完全です。

(APIへのリンクを含めるつもりだったようですが、そこにリンクはありません!)

2
Daniel Stenberg

これは私のサンプルアプリで私にとってはうまくいったものです。

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
Krishnadas PC