从 App Engine 运行时 Python 3.7 调用 Cloud Function [重复]

Posted

技术标签:

【中文标题】从 App Engine 运行时 Python 3.7 调用 Cloud Function [重复]【英文标题】:Calling Cloud Function from App Engine runtime Python 3.7 [duplicate] 【发布时间】:2019-07-13 14:46:44 【问题描述】:

我有一个运行 Python 3.7 的 App Engine 服务,它需要通过 https.oncall 触发器调用我的一个 Cloud Functions 并获得响应。

我认为我可以通过以下方式做到这一点:

import logging
from sys import exit

import firebase_admin

import requests

import google.cloud.logging
client = google.cloud.logging.Client()
client.setup_logging()

firebase_admin.initialize_app()

response = requests.post("https://us-central1-myproject.cloudfunctions.net/functionname", data="foo": "bar")

if response.status_code != 200:
    exit("Could not call function! :(") # This is happening

logging.info(f"Yay! Here is the result: response.text")

# do something else

exit()

但是,我从 Cloud Functions 收到 Request has incorrect Content-Type.

我尝试了请求语法的多种变体,例如:data='"foo": "bar"'data=json.dumps("foo": "bar"),但我只能返回 Request has incorrect Content-Type.Request has incorrect Content-Type. application/x-www-form-urlencoded

如何正确地将字典附加到我的请求中,以便函数以application/json 的形式接收它,如in the Cloud Function docs 所述?

我读过其他帖子,建议使用 json.dumps() 函数会告诉 request 使用 application/json,但 Cloud Functions 对此并不满意。

【问题讨论】:

【参考方案1】:

您没有为您的请求设置Content-Type。从requests==2.4.2开始,可以改用json参数传递字典,自动设置Content-Type

requests.post(url, json="foo": "bar")

【讨论】:

以上是关于从 App Engine 运行时 Python 3.7 调用 Cloud Function [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Google App Engine 远程 API 无法从本地客户端运行

在 App Engine (Python) 运行时检索 YAML 参数

为啥 Google 删除了运行 Python 3.7 的 App Engine 的 Image API?

如何从我在 Google App Engine SDK 上运行的 Python 应用程序访问本地 MySQL 实例?

无法从在具有自定义运行时的 Docker 中运行 .NET Core 应用程序的 App Engine 连接到 Google Cloud SQL 中的 postgres

App Engine标准环境中的Python 3快速入门