使用 HttpRequest 作为 payload_type 时,Google Cloud Tasks 始终将 HttpMethod 设置为 GET

Posted

技术标签:

【中文标题】使用 HttpRequest 作为 payload_type 时,Google Cloud Tasks 始终将 HttpMethod 设置为 GET【英文标题】:Google Cloud Tasks always set HttpMethod to GET when using HttpRequest as payload_type 【发布时间】:2019-10-09 02:57:01 【问题描述】:

根据本文档 [https://cloud.google.com/tasks/docs/creating-http-target-tasks],应该能够创建类型为“http_request”且“http_method”设置为“POST”的任务,但是一旦始终使用方法创建任务,则行为不是预期的'得到'。

在使用 Python 客户端库时遇到此问题后,我决定直接尝试 API 并检查是库的问题还是 API 本身的问题。

使用产品文档页面 [https://cloud.google.com/tasks/docs/reference/rest/v2beta3/projects.locations.queues.tasks/create] 中的“试用此 API”,我尝试使用 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 在此处报告它。

无论如何,如果有人能告诉我我做错了什么,或者在此期间是否有任何解决方法,我将不胜感激。

谢谢!

【问题讨论】:

我很想知道 .... 如果以上是您的实际请求,我在请求中看不到任何内容。例如,task.httpRequest.body 中没有任何内容。可能是环境试图变得智能,如果你提交一个负载为零的 REST 请求,那么它会被转换为 GET 请求? 好点,@Kolban。不幸的是,事实并非如此。我也尝试过通过身体,但问题仍然存在。但为了完整起见,我已经用它更新了这个问题。谢谢! 【参考方案1】:

感谢您的这篇文章,这是现有 Cloud Tasks UI 中的一个错误,我们正在修复这个错误。

与此同时,可以通过运行以下命令来确定任务的正确 HTTP 方法:

gcloud beta 任务描述

https://cloud.google.com/sdk/gcloud/reference/beta/tasks/describe

上述命令将显示任务的正确 HTTP 方法。

【讨论】:

嗨@Vinod Ramachandran,这实际上是个好消息!由于任务实际上是正确创建的,这解决了我的问题。我应该自己测试一下,但我只是接受了 UI 中的内容是正确的……谢谢! 嗨@Vinod,我发现身体没有正确传递。我试图记录我通过的任务:``` httpRequest: httpMethod: 'POST', url: 'some_random_url', body: 'IkhlbGxvLCBXb3JsZCEi' ``` 但是gcloud beta tasks describe 命令给了我这个结果:` ``createTime: '2019-07-16T15:42:15Z' dispatchDeadline: 600s httpRequest: headers: User-Agent: Google-Cloud-Tasks httpMethod: POST url: some_random_url name: task_name scheduleTime: '2019-07-16T15:42 :15.429342Z' 观点:BASIC ```我正在使用@google-cloud/tasks 1.2.0 npm 模块

以上是关于使用 HttpRequest 作为 payload_type 时,Google Cloud Tasks 始终将 HttpMethod 设置为 GET的主要内容,如果未能解决你的问题,请参考以下文章

不能使用HttpRequest 作为http客户端请求中的选项

使用PLC作为payload/shellcode分发系统

UEFI实战SlimBootloader集成UEFI Payload

UEFI实战SlimBootloader集成UEFI Payload

为啥 autofac 在 HttpRequest 结束之前处理一个对象?

js httprequest 啥意思