如何在使用 Cloud Scheduler 发出的 HTTP POST 请求中添加 JSON 正文?它会添加 "Content-Type": "application/json" 标头吗?

问题描述

当您在 Cloud Scheduler 中创建新的 Cron 作业时:

enter image description here

为了传递参数值,我应该在 body 字段中添加什么:

该字段的规范是什么?我应该在那里写 JSON 吗?

假设我想传递这个 JSON 对象:

{
  "foo": "bar"
}

"Content-Type": "application/json" 是否自动添加?

解决方法

您可以在正文字段中提供您认为合适的信息。

至少在 AppEngineAppTarget 的情况下 - HttpTarget 的行为可能是相同的,如描述 headers 字段时 documentation 中所示,它们表明如果作业有正文,则 Cloud Scheduler 会设置以下标头:

Content-Type:默认情况下,Content-Type 标头设置为“application/octet-stream”。可以通过在创建作业时将 Content-Type 显式设置为特定媒体类型来覆盖默认值。例如,Content-Type 可以设置为“application/json”。 ...

AFAIK,无法从 Google Cloud Web 控制台提供 Content-Type 或任何其他自定义标头,但您可以根据需要使用 gcloud CLI。请参阅relevant documentation。请特别注意 OPTIONAL FLAGS 部分,以及其中的 --headers--message-body--message-body-from-file 标志。您的命令应该类似于:

gcloud scheduler jobs create http job-name \
  --schedule="0 */3 * * *" \
  --uri="http://your.url.com" \
  --http-method=POST \
  --headers="Content-Type: application/json" \
  --message-body="{\"field1\":\"value1\",\"field2\":\"value2\"}}"

请参阅此相关 SO 问题 1 2,它们可能会有所帮助。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...