使用Python向Google API发出请求



我正在尝试向Google API发出请求,以使用服务帐户和他的JSON密钥文件创建源存储库。由于该产品没有客户端库,因此我使用以下文档将查询与Python一起使用https://cloud.google.com/source-repositories/docs/reference/rest

我已经成功地使用了类似的代码来调用我的云函数,但这次我在401错误处被阻止了这些请求。我用我的服务帐户的JSON设置了GOOGLE_APPLICATION_CREDENTIALS,赋予服务帐户Source Repository Administrator的权限,但仍然返回401。

这是我的代码

import urllib.request
import json
import urllib
import google.auth.transport.requests
import google.oauth2.id_token
body = { "name" : "projects/$my_project_name/repos/$name_repo"}
jsondata = json.dumps(body).encode("utf8")
req = urllib.request.Request('https://sourcerepo.googleapis.com/v1/projects/$my_project_name/repos')
req.add_header('Content-Type', 'application/json; charset=utf-8')
auth_req = google.auth.transport.requests.Request()
id_token = google.oauth2.id_token.fetch_id_token(auth_req, 'https://www.googleapis.com/auth/cloud-platform')
req.add_header("Authorization", f"Bearer {id_token}")
response = urllib.request.urlopen(req, jsondata)
print (response.read().decode())

我也尝试过在url的末尾使用API-KEY,就像这个

req = urllib.request.Request('https://sourcerepo.googleapis.com/v1/projects/$my_project_name/repos?key=$my-api-key')

谢谢

我也尝试过在url的末尾使用API-KEY,就像这个

不支持API密钥。

您的代码使用的是OIDC身份令牌,而不是OAuth Acess令牌。

from google.oauth2 import service_account
credentials = service_account.Credentials.from_service_account_file(
'/path/to/key.json',
scopes=['https://www.googleapis.com/auth/cloud-platform'])

request = google.auth.transport.requests.Request()
credentials.refresh(request)

//使用以下代码添加访问令牌:

req.add_header("Authorization", f"Bearer {credentials.token}")

相关内容

  • 没有找到相关文章

最新更新