В соответствии с этой документацией [https://cloud.google.com/tasks/docs/creating-http-target-tasks] должна быть возможность создавать задачи с типом «http_request» и «http_method», установленными на «POST», но поведение не является ожидаемым, если задача всегда создается с помощью метода «GET».
После возникновения этой проблемы при использовании клиентской библиотеки Python я решил попробовать API напрямую и проверить, была ли это проблема с библиотекой или с самим API.
Используя «Попробуйте этот API» на странице документации по продукту [https://cloud.google.com/tasks/docs/reference/rest/v2beta3/projects.locations.queues.tasks/create], я попытался создать аналогичные задачи, используя типы http_request и app_engine_http_request и всегда устанавливая http_method в POST.
Если я установлю тело запроса следующим образом:
{
"task": {
"appEngineHttpRequest": {
"httpMethod": "POST",
"relativeUri": "/test",
"body": "c2hhbGxvdyBub3c="
}
}
}
... задача создана, и метод POST, как и ожидалось. Но если я установлю тело запроса на:
{
"task": {
"httpRequest": {
"httpMethod": "POST",
"url": "https://httpstat.us/404",
"body": "c2hhbGxvdyBub3c="
}
}
}
...задание создается, но методом GET вместо POST.
Вот что я получаю в своей очереди:
Я считаю, что это ошибка, и поэтому я сообщаю об этом здесь с тегом google-apis-explorer, как рекомендовано на странице поддержки.
В любом случае, если бы кто-нибудь мог сказать мне, делаю ли я что-то не так или есть ли какой-либо обходной путь, я был бы очень признателен.
Спасибо!
Хороший вопрос, @Kolban. К сожалению, это не так. Я тоже пробовал передать тело, и проблема остается. Но я обновил вопрос с ним для полноты. Спасибо!
Спасибо за этот пост, это ошибка в существующем пользовательском интерфейсе облачных задач, и мы работаем над ее исправлением.
Тем временем правильный HTTP-метод задачи можно определить, выполнив следующую команду:
gcloud beta задачи описать
https://cloud.google.com/sdk/gcloud/reference/beta/tasks/describe
Приведенная выше команда покажет правильный метод HTTP для задачи.
Привет @Vinod Ramachandran, это действительно отличная новость! Поскольку задача на самом деле создается правильно, это решает мои проблемы. Я должен был проверить это сам, вместо этого я просто признал, что то, что было в пользовательском интерфейсе, было правильным... Спасибо!
Привет @Vinod, я обнаружил, что тело не было передано должным образом. Я попытался зарегистрировать задачу, которую я передал: ``` { httpRequest: { httpMethod: 'POST', url: 'some_random_url', body: 'IkhlbGxvLCBXb3JsZCEi' } } ``` но команда gcloud beta tasks describe
дает мне этот результат: ``` createTime: '2019-07-16T15:42:15Z' dispatchDeadline: 600 сек. Вид Z: BASIC ``` Я использую @google-cloud/tasks
1.2.0 модуль npm
Мне интересно вслух .... если вышеизложенное является вашим фактическим запросом, я не вижу никакого содержания в запросе. Например, ничего в task.httpRequest.body. Может быть, среда пытается быть умной, и если вы отправляете запрос REST с нулевой полезной нагрузкой, он преобразуется в запрос GET?