Как использовать глагол PATCH с curl
Я пытаюсь сделать вызов 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."}}}
Вы можете найти документацию об этой услуге здесь.
Ответы
Ответ 1
Это формат, который вы должны использовать:
curl --request PATCH https://api.viafoura.com/v2/dev.viafoura.com/pages/7000000043515?status=closed
Похоже, что этот API хочет, чтобы параметр status
был параметром запроса в URL, а не частью тела PATCH.
В этот момент сервер вернет ошибку 401: "Вы должны войти в систему, чтобы изменить настройки страницы". Предположительно, вы должны сначала войти в систему с чем-то вроде этого:
curl --request POST "https://api.viafoura.com/v2/dev.viafoura.com/users/login?password=TeNn!sNum8er1&[email protected]"
Я использовал учетные данные из их документации в этом примере, который, как я полагал, будет работать на их сервере разработчика, но в настоящее время он возвращает ошибку "Неверный пароль".
Однако, если у вас есть действительные учетные данные, вы должны получить cookie файл сеанса, который затем можно использовать для аутентификации вашего запроса PATCH.
Ответ 2
Я пытался использовать PATCH для ресурса tastypie с похожим запросом на завиток. Для меня проблема заключалась в том, что данные должны были быть переданы так:
curl --data '{"field": "new_value"}' -X PATCH http://127.0.0.1:8000/api/v1/resource_uri/pk/
Обратите внимание, что то, что я передаю в флаг данных, находится внутри того, что похоже на словарь, переданный как строка, вместо того, чтобы помещать параметр непосредственно, как в вопросе. Конечно, парам тоже работает, как уже ответил, но, надеюсь, это помогает некоторым людям.
Ответ 3
Ваша командная строка должна работать. Как вы можете видеть в PATCH RFC5789, HTTP-запрос аналогичен тому, что посылает curl (используйте --trace-ascii, чтобы увидеть полную связь curl). Возможно, вы захотите изменить тип содержимого (используя - -H eader).
Упомянутый отсутствующий параметр состояния, вероятно, ссылается на содержимое в теле запроса. Ваши данные "status = closed", возможно, не в правильном формате (JSON?) Или они неполные.
Ответ 4
Это то, что сработало для меня в моем примере приложения.
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
}
]
}
}
}
Ответ 5
Альтернативный способ заключается в следующем: это через POST-вызов, хотя
curl --data status=closed https://api.viafoura.com/v2/dev.viafoura.com/pages/7000000043515?verb=PATCH
Я предполагаю, что это не общий путь и применим только к этому конкретному экземпляру.