使用 Cloud Scheduler 触发 HTTP 云函数

2024-06-19

我的云功能的 Cloud Scheduler 作业出现问题。我使用以下参数创建了作业:

Target: HTTP

URL:我的云函数的触发网址

HTTP方式: POST

Body:

{
 "expertsender": {
  "apiKey": "ExprtSender API key",
  "apiAddress": "ExpertSender APIv2 address",
  "date": "YYYY-MM-DD",
  "entities": [
     {
        "entity": "Messages"
     },
     {
        "entity": "Activities",
        "types":[
           "Subscriptions"
        ]
     }
  ]
 },
 "bq": {
         "project_id": "YOUR GCP PROJECT",
         "dataset_id": "YOUR DATASET NAME",
         "location": "US"
       } 
}

这个身体里的真正价值观已经改变了。

当我运行这项工作时,我遇到了错误。原因是处理POST请求的body引起的。

但是,当我使用这个主体并将其用作测试中的触发事件时,我没有收到任何错误。所以我认为,我的工作中存在身体代表问题,但我不知道如何解决它。任何想法我都会很高兴。



免责声明:我尝试使用 NodeJS 解决同样的问题,并且我能够得到解决方案


我知道这是一个老问题。但我觉得回答这个问题是值得的,因为我花了近 2 个小时来找出这个问题的答案。

场景一:通过云调度器触发云功能

  • 函数无法读取请求正文中的消息。

场景 - 2:通过云函数界面中的“测试”选项卡触发云函数

  • 函数调用总是执行得很好,没有错误。

我发现了什么?

  • 当 GCF 例程通过 Cloud Scheduler 执行时,它会发送标头content-type as application/octet-stream。这使得当云调度程序 POST 数据时,express js 无法解析请求正文中的数据。
  • 但是,当使用完全相同的请求正文通过 Cloud Function 接口测试该函数时,一切正常,因为Testing接口上的功能发送标头content-type as application/jsonExpress js 能够读取请求正文并将数据解析为 JSON 对象。

Solution

我必须手动将请求正文解析为 JSON(显式使用基于内容类型标头的 if 条件)才能获取请求正文中的数据。

/**
 * Responds to any HTTP request.
 *
 * @param {!express:Request} req HTTP request context.
 * @param {!express:Response} res HTTP response context.
 */
exports.helloWorld = (req, res) => {
  let message = req.query.message || req.body.message || 'Hello World!';

  console.log('Headers from request: ' + JSON.stringify(req.headers));

  let parsedBody;

  if(req.header('content-type') === 'application/json') {
    console.log('request header content-type is application/json and auto parsing the req body as json');
    parsedBody = req.body; 
  } else {
    console.log('request header content-type is NOT application/json and MANUALLY parsing the req body as json');
    parsedBody = JSON.parse(req.body);
  }

  console.log('Message from parsed json body is:' + parsedBody.message);

  res.status(200).send(message);
};

这确实是谷歌必须解决的一个功能问题,希望谷歌尽快修复它。

Cloud Scheduler - 内容类型标头问题 https://i.stack.imgur.com/wWMNG.png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Cloud Scheduler 触发 HTTP 云函数 的相关文章

  • Flask-SQLAlchemy 构造函数

    在 Flask SQLAlchemy 教程中 定义了 User 模型的构造函数 from flask import Flask from flask ext sqlalchemy import SQLAlchemy app Flask na
  • Python中Shift和Caps Lock的状态

    我正在使用 Python 2 5 编写 TkInter 应用程序 我需要找出大写锁定和 Shift 键的状态 true 或 false 我在整个网络上进行了搜索 但找不到解决方案 Tkinter 中的键盘事件可能很棘手 我建议您按顺序查看以
  • 数据框应用不接受轴参数

    我有两个数据框 data and rules gt gt gt data gt gt gt rules vendor rule 0 googel 0 google 1 google 1 dell 2 googly 2 macbook 我正在
  • ModuleNotFoundError:没有名为“pwd”的模块——airflow python [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我想使用以下方式安装气流的 Web UI airflow webserver port 1080 但我收到这个错误 Mo
  • Python/Pandas –– ParserError:标记数据时出错。 C 错误:第 i 行中预期有 x 字段,但看到了 y

    我需要一些帮助 我正在使用以下代码 matplotlib inline import csv from datetime import datetime import numpy as np import pandas as pd from
  • Python setup.py 运行 shell 脚本

    我需要在创建 Python 包时在 sdist 阶段运行我自己的脚本 我写了以下脚本 你知道更好的方法吗 您能否推荐更好的一个或链接到 setuptools 的官方文档 其中已解释了这一时刻 import subprocess import
  • Python 中的文字可以被覆盖吗?

    找不到更好的方式来表达标题 请随时更正 我对 Python 还很陌生 目前正在尝试该语言 我注意到所有内置类型都不能与其他成员一起扩展 例如 我想添加一个each方法到list类型 但那是不可能的 我意识到它是出于效率原因而设计的 并且大多
  • python中的多服务器监控/自动重启

    我有 2 个服务器程序 必须使用 GNU Screen 启动 我想使用基于 Python 的程序来强化这些服务器 防止崩溃 该程序启动每个屏幕会话 然后监视服务器进程 如果服务器进程崩溃 我需要 python 代码来终止无关的屏幕会话并再次
  • Python select() 行为很奇怪

    我在理解 select select 的行为时遇到一些困难 请考虑以下 Python 程序 def str to hex s def dig n if n gt 9 return chr 65 10 n else return chr 48
  • 将行转换为 pandas 中逗号分隔的字符串

    我有一个熊猫数据框 from pandas import DataFrame import pandas as pd df2 DataFrame a one one two two three two one six b x y z y x
  • 在 Python 中使用带有 asyncio 的信号量

    我试图限制使用信号量同时运行的异步函数的数量 但我无法让它工作 我的代码归结为 import asyncio async def send i print f starting i await asyncio sleep 4 print f
  • Django-获取外键对象列表

    假设我有以下模型 class ParentModel models Model name models CharField child models ForeignKey ChildModel class ChildModel models
  • Python 字符串格式 - 类型错误 - 格式字符串参数不足

    那么这个字符串有什么问题呢 我无法弄清楚为什么它说格式字符串没有足够的参数 我是 Python 新手 只是想弄清楚 编辑 这与建议的其他问题不同 另一个正在尝试做一些我什至没有涉及的疯狂数组事情 我只需要了解元组的基本概念以及字符串格式化的
  • 使用 Flask 测试客户端请求传递 cookie 标头

    我在让 Flask 测试客户端传递 cookie 时遇到问题 这段代码曾经有效 我认为我的环境中的某些内容发生了变化 这打破了这一点 我最近创建了一个新的 Python 3 7 virtualenv 并安装了 Flask 1 0 2 fro
  • 如何计算 pandas 系列中到前一个零的距离?

    我有以下 pandas 系列 以列表形式表示 7 2 0 3 4 2 5 0 3 4 我想定义一个新的系列 返回到最后一个零的距离 这意味着我想要以下输出 1 2 0 1 2 3 4 0 1 2 如何以最有效的方式在 pandas 中做到这
  • PyPy/RPython 可以用来生成小型独立可执行文件吗?

    或者 可以使用 PyPy RPython 将 Python 编译 翻译为 C C 不需要 Python 运行时 我试图通过它的 RPython 和 Python 它的运行 它的编译和它的翻译来理解 PyPy 但有些失败 I have a h
  • Python:如何即时生成代码?

    我遇到了一个问题 我必须动态生成程序然后执行它 我们怎样才能做到这一点 您可以使用 eval 函数从字符串执行代码 一个例子是 import math test r dir math eval test Output doc name pa
  • 创建将一把小提琴按色调分割的小提琴图的正确方法是什么?

    创建将一把小提琴分开的小提琴图的正确方法是什么hue 我尝试了不同的方法 似乎唯一的方法是创建一个为数据集中的每个条目共享相同值的功能 并将该功能的名称传递为x fig plt figure figsize 20 8 fig add sub
  • Pylance 无法在 VSCode Jupyter 笔记本中工作

    皮兰斯工作于 py files 但不适用于 Jupyter ipynb笔记本 我尝试保存 ipynb 同样的问题 如何在我的笔记本中启用 Pylance 警告 Jupyter 扩展似乎不支持 Pylance 我提交这个问题就是为了解决这个缺
  • 单元测试期间的 Python 日志捕获

    我正在尝试捕获在 python 单元测试过程中创建的日志 并在此处看到了代码 https stackoverflow com a 1049375 576333 https stackoverflow com a 1049375 576333

随机推荐