it-swarm.com.de

Wie verwende ich das PATCH-Verb mit curl

Ich versuche, einen PATCH-Aufruf an einen Server zu tätigen. Ich verwende den folgenden Befehl: 

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

Ist dies der richtige Weg, um die PATCH-Anfrage zu senden? Ich erhalte die Fehlermeldung, dass kein Status-Parametersatz vorhanden ist. Ich vermute, dass --data nur für die Anforderung von POST ist und der Server daher den Statusparameter nicht findet.

Dies ist die Antwort (FYI):

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

Dokumentation zu diesem Service finden Sie hier .

48
sheidaei

Dieses Format sollten Sie verwenden:

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

Die Verwendung von -X scheint in Bezug auf das Senden einer PATCH-Anfrage nicht zu funktionieren - Sie müssen --request PATCH verwenden. Diese API scheint auch den status-Parameter als Abfrageparameter für die URL zu haben, nicht als Teil des PATCH-Body.

An diesem Punkt gibt der Server einen Fehler 401 zurück: "Sie müssen angemeldet sein, um die Seiteneinstellungen zu ändern." Vorausgesetzt, Sie müssen sich zuerst mit so etwas einloggen:

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

Ich habe die Anmeldeinformationen aus ihrer Dokumentation in diesem Beispiel verwendet, von denen ich dachte, dass sie auf ihrem Dev-Server funktionieren würde, aber derzeit wird der Fehler "Falsches Kennwort" zurückgegeben.

Wenn Sie jedoch über gültige Anmeldeinformationen verfügen, sollten Sie ein Sitzungscookie zurückholen, mit dem Sie Ihre PATCH-Anfrage authentifizieren können.

73

Ich habe versucht, eine geschmackvolle Ressource mit einer ähnlichen Anfrage zu finden. Für mich bestand das Problem darin, dass die Daten so weitergegeben werden mussten:

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

Beachten Sie, dass das, was ich an die Datenflagge übergeben habe, in einem Wörterbuch enthalten ist, das als Zeichenfolge übergeben wird, anstatt den Parameter direkt in die Frage zu stellen. Natürlich funktioniert ein Parameter auch als bereits beantwortet, aber hoffentlich hilft das einigen Leuten.

6
Nick Brady

Ihre Befehlszeile sollte funktionieren. Wie Sie in PATCH RFC5789 sehen können, ist die HTTP-Anfrage ähnlich wie bei curl (verwenden Sie --trace-ascii , um die vollständige Curl-Kommunikation zu sehen). Möglicherweise möchten Sie den Inhaltstyp ändern (mithilfe von --header ).

Der erwähnte fehlende Statusparameter bezieht sich wahrscheinlich auf den Inhalt des Anforderungshauptteils. Ihre "status = closed" -Daten liegen möglicherweise nicht im richtigen Format (JSON?) Oder sind unvollständig.

(Sie haben anscheinend beabsichtigt, einen Link zur API hinzuzufügen, aber es gibt keinen Link!)

2
Daniel Stenberg

Dies hat in meiner Beispiel-App für mich funktioniert.

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