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

Posted

技术标签:

【中文标题】如何在使用 Cloud Scheduler 发出的 HTTP POST 请求上添加 JSON 正文?它会添加“Content-Type”:“application/json”标头吗?【英文标题】:How to add a JSON body on a HTTP POST request made with Cloud Scheduler? Will it add the "Content-Type": "application/json" header? 【发布时间】:2021-05-02 04:49:25 【问题描述】:

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

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

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

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


  "foo": "bar"

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

【问题讨论】:

【参考方案1】:

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

至少在AppEngineAppTarget 的情况下,HttpTarget 的行为可能与documentation 中描述的headers 字段中所指示的相同,它们表明如果作业有主体, 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,它们可能会有所帮助。

【讨论】:

非常感谢!不知道可以通过gcloud 添加标题。当您检查使用gcloud 创建的cron 作业并设置了一些headers 时怎么样。它们如何显示在 Cloud Scheduler 控制台上?我的意思是,如何验证哪些作业具有哪些标题?我猜gcloud 有某种--list 标志可能会记录所有这些细节。 欢迎您@cbdeveloper。老实说,我不知道 Google Cloud Web 控制台是否为这项工作提供了该级别的详细信息 - 我将深入研究它,但 gcloud CLI 提供了可用于获取有关信息的 describelist 命令一个特定的工作或列表,并且可以选择分别过滤、排序等你的工作。 再次感谢您。这很好用。我刚刚将标题标志更改为:--headers Content-Type=application/json。他们真的应该在控制台中添加一个headers 配置。 是的,我想是的@cbdeveloper。 网页界面已添加标题

以上是关于如何在使用 Cloud Scheduler 发出的 HTTP POST 请求上添加 JSON 正文?它会添加“Content-Type”:“application/json”标头吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何增加 Cloud Scheduler 请求超时期限?

如何为 Google Cloud Scheduler 设置基本身份验证

如果我的 Google Cloud Scheduler 作业失败,如何发送电子邮件提醒?

使用 Cloud Scheduler 触发 Cloud Functions 的 HTTP

验证来自 Google Cloud Scheduler 的 HTTP 请求

Cloud Run 和 Cloud Scheduler - 在完整数据集上获取失败结果