Как использовать глагол PATCH с curl

Я пытаюсь сделать вызов исправления на сервер. Я использую следующую команду:

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

это правильный способ отправки запроса на исправление? Я получаю сообщение об ошибке, говорящее, что нет набора параметров состояния. Я предполагаю, что --data предназначен только для POST-запроса, и поэтому сервер не находит параметр status.

это ответ (FYI):

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

Вы можете найти документацию по данной услуге здесь.

5 ответов


Это формат, который вы должны использовать:

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

используя -X не работает с точки зрения отправки запроса на исправление - вы должны использовать --request PATCH. Кроме того, этот API, похоже, хочет status параметр как параметр запроса на url, а не часть тела исправления.

в этот момент сервер вернет ошибку 401: "вы должны войти в систему, чтобы изменить настройки страницы."Предположительно, вы должны сначала войти в систему с чем-то вроде это:

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

я использовал учетные данные из их документации в этом примере, который, как я полагал, будет работать на их dev-сервере, но в настоящее время возвращает ошибку "неверный пароль".

если у вас есть действительные учетные данные, вы должны вернуть cookie сеанса, который вы можете использовать для аутентификации вашего запроса на исправление.


Я пытался подключиться к ресурсу tastypie с аналогичным запросом curl. Для меня проблема заключалась в том, что данные должны были передаваться так:

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

обратите внимание, как то, что я передаю флагу данных, находится внутри того, что выглядит как словарь, переданный как строка, а не напрямую, как в вопросе. Конечно, парам тоже работает, как уже ответили, но, надеюсь, это поможет некоторым людям.


командная строка должна работать. Как вы можете видеть в патче RFC5789, HTTP-запрос похож на то, что отправляет curl (используйте --trace-ascii чтобы увидеть полное сообщение curl). Возможно, вы захотите изменить тип контента (используя --заголовок).

упомянутый отсутствующий параметр состояния, вероятно, относится к содержимому в теле запроса. Ваши данные" status=closed", возможно, не в правильном формате (JSON?) или это незавершенный.

(вы, похоже, намеревались включить ссылку на API, но там нет ссылки!)


это то, что работал для меня в моем примере приложения.

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


альтернативный способ заключается в следующем, это через почтовый вызов, хотя

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

Я предполагаю, что это не общий способ и применяется только к этому конкретному экземпляру.