我正在尝试使用Google API(而不是通过控制台)向我的App Engine应用添加自定义域映射。但是,使用Discovery API Client发出http请求时,我不断收到403禁止错误。我已经从App Engine获得了拥有所有者权限的凭据json文件,并使用GOOGLE_APPLICATION_CREDENTIALS
env变量指向该文件。由于我拥有完整的权限,所以我猜问题是我没有正确使用API,但无法查看缺少的内容。
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = os.path.dirname(__file__) + str('/json_cred_file')
apps_client = googleapiclient.discovery.build('appengine', 'v1beta')
response = apps_client.apps().domainMappings().create(
appsId='apps/myappname', body=json.loads(
'{"id": "newsubdomain.mydomain.com","sslSettings": '
'{"sslManagementType": "AUTOMATIC" }}')).execute()
这是错误:
WARNING 2018-07-06 23:51:09,331 http.py:119] Encountered 403 Forbidden with reason "forbidden"
答案 0 :(得分:1)
我联系了Google支持人员,问题是使用域映射功能时,需要将该服务帐户作为所有者添加到搜索控制台。这是搜索控制台:https://www.google.com/webmasters/tools/home
答案 1 :(得分:0)
他们在文档中有一个特殊页面,可以在应用程序引擎上使用此库:https://developers.google.com/api-client-library/python/guide/google_app_engine
这就是我使用googleapiclient
库的方式。我看到的区别是这一行:
credentials = GoogleCredentials.get_application_default()
from oauth2client.client import GoogleCredentials
from lib.googleapiclient import discovery
class DataFlowJobsListHandler(AdminResourceHandler):
def get(self, resource_id=None):
"""
Wrapper to this:
https://cloud.google.com/dataflow/docs/reference/rest/v1b3/projects.jobs/list
"""
if resource_id:
self.abort(405)
else:
credentials = GoogleCredentials.get_application_default()
service = discovery.build('dataflow', 'v1b3', credentials=credentials)
project_id = app_identity.get_application_id()
_filter = self.request.GET.pop('filter', 'UNKNOWN').upper()
jobs_list_request = service.projects().jobs().list(
projectId=project_id,
filter=_filter) #'ACTIVE'
jobs_list = jobs_list_request.execute()
return {
'$cursor': None,
'results': jobs_list.get('jobs', []),
}