Как использовать глагол 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
Я предполагаю, что это не общий способ и применяется только к этому конкретному экземпляру.