Подтвердить что ты не робот

Как использовать глагол 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."}}}

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

4b9b3361

Ответ 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 

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