use*_*360 14 python python-requests google-cloud-platform google-cloud-functions
我正在尝试使用以下命令从 Python 中调用 Google Cloud 函数:
import requests
url = "MY_CLOUD_FUNCTON_URL"
data = {'name': 'example'}
response = requests.post(url, data = data)
Run Code Online (Sandbox Code Playgroud)
但我得到了错误:Your client does not have permission to get URL MY_CLOUD_FUNCTON from this server
有谁知道我怎样才能避免这个错误?我假设我应该以某种方式将凭据作为请求的一部分传递?
另请注意,如果我尝试从命令行通过 gcloud 调用该函数(如下所示),那么它可以工作,但我想在 python 中执行此操作
gcloud functions call MY_CLOUD_FUNCTON --data '{"name": "example"}'
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激!
Mar*_*ani 11
给定一个在HTTP模式下工作的云函数,需要身份验证才能触发。
您需要生成一个身份验证令牌并将其插入标头中,如下所示:
import os
import json
import requests
import google.oauth2.id_token
import google.auth.transport.requests
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = './my-service-account.json'
request = google.auth.transport.requests.Request()
audience = 'https://mylocation-myprojectname.cloudfunctions.net/MyFunctionName'
TOKEN = google.oauth2.id_token.fetch_id_token(request, audience)
r = requests.post(
audience,
headers={'Authorization': f"Bearer {TOKEN}", "Content-Type": "application/json"},
data=json.dumps({"key": "value"}) # possible request parameters
)
r.status_code, r.reason
Run Code Online (Sandbox Code Playgroud)
您在这里有几个选择。要么向公众开放该函数,以便任何人都可以调用它,要么采取更安全的路线,尽管需要更多的步骤。我将介绍第二个选项,因为这是我出于安全原因建议的选项,但是如果您对简单地向公众开放该功能感到满意(毕竟,如果您尝试创建公共端点,这尤其有用),请参阅此文档。
但是,如果您想限制谁可以调用您的 GCF,则必须执行更多步骤。
credentials.json
,下一步就很简单了。您只需使用文件的路径填充环境变量 即可。GOOGLE_APPLICATION_CREDENTIALS
credentials.json
完成这些步骤后,您可以像以前一样简单地调用 GCF,只是这一次,它将作为您创建的服务帐户来调用它,该帐户包含调用 GCF 所需的所有权限。
归档时间: |
|
查看次数: |
9937 次 |
最近记录: |