Google 云 API - Python - 请求包含无效参数
Google Cloud APIs - Python - Request contains an invalid argument
使用 Google 云 API 和 Oauth2,我尝试列出项目并使用我的 Python 桌面应用程序显示每个项目的 IAM 策略。示例代码如下:
appflow = flow.InstalledAppFlow.from_client_secrets_file("client_secrets.json",
scopes=["https://www.googleapis.com/auth/cloud-platform"])
appflow.run_console()
credentials = appflow.credentials
service = googleapiclient.discovery.build(
'cloudresourcemanager', 'v1', credentials=credentials)
operation1 = service.projects().list().execute()
jason=json.dumps(
operation1,
sort_keys=True,
indent=3)
data = json.loads(jason)
#Gets the list of projects in a Python List object [Proj]
proj=[]
for mem in data['projects']:
print(mem['projectId'])
proj.append(mem['projectId'])
for prj in proj:
resource = 'projects/' + prj
response1 = service.projects().testIamPermissions(resource=resource, body=None, x__xgafv=None).execute()
response2 = service.projects().listOrgPolicies(resource=resource, body=None, x__xgafv=None).execute()
response3 = service.projects().getIamPolicy(resource=resource, body=None, x__xgafv=None).execute()
我在所有 3 个调用中都遇到了类似的错误:
googleapiclient.errors.HttpError:https://cloudresourcemanager.googleapis.com/v1/projects/projects%2Fproject-name:testIamPermissions?alt=json 返回“请求包含无效参数”。详细信息:“请求包含无效参数。”>
参数似乎是正确的。 service(cloudresourcemanager) version v1/v3 有区别吗?我错过了什么吗?提前致谢。
我认为您不需要像 HTTPS 示例那样使用 projects/
解析资源,因为您正在使用的库对您来说应该是抽象的,所以如果您删除 resource = 'projects/' + prj
并尝试直接使用项目 ID 调用
response1 = service.projects().testIamPermissions(resource=prj, body=None, x__xgafv=None).execute()
response2 = service.projects().listOrgPolicies(resource=prj, body=None, x__xgafv=None).execute()
response3 = service.projects().getIamPolicy(resource=prj, body=None, x__xgafv=None).execute()
如果有效,您应该不会再收到错误 400,而是 403“权限被拒绝”,因为您缺少那些 API 调用的某些范围(根据您的代码示例)。
示例google提供
使用 Google 云 API 和 Oauth2,我尝试列出项目并使用我的 Python 桌面应用程序显示每个项目的 IAM 策略。示例代码如下:
appflow = flow.InstalledAppFlow.from_client_secrets_file("client_secrets.json",
scopes=["https://www.googleapis.com/auth/cloud-platform"])
appflow.run_console()
credentials = appflow.credentials
service = googleapiclient.discovery.build(
'cloudresourcemanager', 'v1', credentials=credentials)
operation1 = service.projects().list().execute()
jason=json.dumps(
operation1,
sort_keys=True,
indent=3)
data = json.loads(jason)
#Gets the list of projects in a Python List object [Proj]
proj=[]
for mem in data['projects']:
print(mem['projectId'])
proj.append(mem['projectId'])
for prj in proj:
resource = 'projects/' + prj
response1 = service.projects().testIamPermissions(resource=resource, body=None, x__xgafv=None).execute()
response2 = service.projects().listOrgPolicies(resource=resource, body=None, x__xgafv=None).execute()
response3 = service.projects().getIamPolicy(resource=resource, body=None, x__xgafv=None).execute()
我在所有 3 个调用中都遇到了类似的错误:
googleapiclient.errors.HttpError:
参数似乎是正确的。 service(cloudresourcemanager) version v1/v3 有区别吗?我错过了什么吗?提前致谢。
我认为您不需要像 HTTPS 示例那样使用 projects/
解析资源,因为您正在使用的库对您来说应该是抽象的,所以如果您删除 resource = 'projects/' + prj
并尝试直接使用项目 ID 调用
response1 = service.projects().testIamPermissions(resource=prj, body=None, x__xgafv=None).execute()
response2 = service.projects().listOrgPolicies(resource=prj, body=None, x__xgafv=None).execute()
response3 = service.projects().getIamPolicy(resource=prj, body=None, x__xgafv=None).execute()
如果有效,您应该不会再收到错误 400,而是 403“权限被拒绝”,因为您缺少那些 API 调用的某些范围(根据您的代码示例)。
示例google提供