从 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