首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何验证http请求,以访问gcp服务(python)

如何验证http请求,以访问gcp服务(python)
EN

Stack Overflow用户
提问于 2021-12-27 16:10:26
回答 1查看 1.1K关注 0票数 3

为了获得已启用的GCP服务列表,我尝试按照这个service.list请求在这个链接中获取它。

这是我的密码:

代码语言:javascript
复制
import json
from requests.auth import HTTPBasicAuth
import requests
from google.oauth2 import service_account


auth = HTTPBasicAuth('myusername@gmail.com','xyz....')

url = 'https://serviceusage.googleapis.com/v1/projects/my-proj-id123/services'

headers = {
   "Accept": "application/json"
 }

response = requests.request(
   "GET",
   url,
   headers=headers,
   auth=auth
 )
# a=json.loads(response.text)
print(response.text) 

但是我发现了一个错误:

代码语言:javascript
复制
{
  "error": {
    "code": 403,
    "message": "The request is missing a valid API key.",
    "status": "PERMISSION_DENIED"
  }
}

注意事项:我需要一种方法来根据这个链接获取响应,无论是通过服务帐户还是通过链接令牌。我有服务帐户密钥(credential.json),但是我不知道在哪里放置http请求。请给我一些程序建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-27 18:33:28

我鼓励您在与Google的服务交互时考虑使用Google的SDK。

这些服务不仅提供了特定于语言的资源类型,方便了创建请求和响应,还提供了更简单的auth、日志记录等功能。

记录在案:

设置:

代码语言:javascript
复制
PROJECT=[[YOUR-PROJECT]]
ACCOUNT=[[YOUR-ACCOUNT]]

python3 -m venv venv
source venv/bin/activate

python3 -m pip install google-auth
python3 -m pip install google-cloud-service-management

gcloud iam service-accounts create ${ACCOUNT} \
--project=${PROJECT}

EMAIL="${ACCOUNT}@${PROJECT}.iam.gserviceaccount.com"

gcloud projects add-iam-policy-binding ${PROJECT} \
--member=serviceAccount:${EMAIL} \
--role=roles/viewer

gcloud iam service-accounts keys create ${PWD}/${ACCOUNT}.json \
--iam-account=${EMAIL}

export GOOGLE_APPLICATION_CREDENTIALS=${PWD}/${ACCOUNT}.json

python3 ./main.py

main.py

代码语言:javascript
复制
import google.auth
from google.cloud import servicemanagement_v1

credentials,project = google.auth.default()

client = servicemanagement_v1.ServiceManagerClient()

# How to construct the Request
rqst = {
     # Purely for example
    "pageSize": 5,
     # List only project's services
    "consumer_id: "project:{project}".format(
        project=project
    )
}

# Response is a ServiceListPager
resp = client.list_services(request=rqst)

# Which is iterable
for managed_service in resp:
    try:
        # This is a quirk of gRPC Transcoding
        # Convert a ManagedService to JSON
        j=servicemanagement_v1.ManagedService.to_json(managed_service)
        print(j)
    except Exception as e:
        print(e)

产量:

代码语言:javascript
复制
{
  "serviceName": "abusiveexperiencereport.googleapis.com",
  "producerProjectId": ""
}
{
  "serviceName": "acceleratedmobilepageurl.googleapis.com",
  "producerProjectId": ""
}
{
  "serviceName": "accessapproval.googleapis.com",
  "producerProjectId": ""
}
...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70497825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档