如何在使用 Cloud Scheduler 发出的 HTTP POST 请求上添加 JSON body?它会添加 "Content-Type": "application/json" header 吗?

How to add a JSON body on a HTTP POST request made with Cloud Scheduler? Will it add the "Content-Type": "application/json" header?

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

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

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

假设我想传递这个 JSON object:

{
  "foo": "bar"
}

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

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

至少在 AppEngineAppTarget 的情况下 - 行为可能与 HttpTarget 相同,如描述 headers 字段时在 documentation 中所示,它们表示如果作业具有 body,Cloud Scheduler 将设置以下 headers:

Content-Type: By default, the Content-Type header is set to "application/octet-stream". The default can be overridden by explictly setting Content-Type to a particular media type when the job is created. For example, Content-Type can be set to "application/json". ...

AFAIK,无法从 Google 云 Web 控制台提供 Content-Type 或任何其他自定义 header,但您可以使用 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,它们可能会有所帮助。