【问题标题】:Google Service Account Http Error 500 - PythonGoogle 服务帐户 Http 错误 500 - Python
【发布时间】:2012-10-11 04:20:59
【问题描述】:

我一直在努力解决这个问题,所以我希望有人能提供帮助。

似乎是使用服务帐户访问 Google API 端点的相对简单的代码 - 但我收到 Http Error 500

它适用于 Tasks API,相同的身份验证。

我的源代码:

import httplib2
import pprint
import sys

from apiclient.discovery import build
from oauth2client.client import SignedJwtAssertionCredentials

f = file('key.p12', 'rb')
key = f.read()
f.close()

credentials = SignedJwtAssertionCredentials(
'403695561042-6ntna04usrl5sscg3ovij6t4d8vfvsqp@developer.gserviceaccount.com',
key,
scope='https://www.googleapis.com/auth/apps.order.readonly')

http = httplib2.Http()
http = credentials.authorize(http)
service = build("reseller", "v1", http=http)
lists = service.subscriptions().list().execute(http=http) 
print lists

回复:

HttpError: <unprintable HttpError object>

追溯:

Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1701, in __call__
    return self.wsgi_app(environ, start_response)
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1689, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1687, in wsgi_app
    response = self.full_dispatch_request()
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1360, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1358, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1344, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/Users/admin/Sites/newmind/reseller-api/app.py", line 79, in index
    lists = service.subscriptions().list().execute(http=http)
  File "build/bdist.macosx-10.8-intel/egg/oauth2client/util.py", line 120, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "build/bdist.macosx-10.8-intel/egg/apiclient/http.py", line 678, in execute
    raise HttpError(resp, content, uri=self.uri)

直接从 Google Sample 复制代码,只是更改了服务名称和身份验证。 http://code.google.com/p/google-api-python-client/source/browse/samples/service_account/tasks.py 任务 API 返回具有相同凭据的 http 200。

当我使用非常标准的 httplib2 请求时,我得到的响应如下:

WARNING:oauth2client.util:new_request() takes at most 1 positional argument (2 given)
    {'status': '500', 'content-length': '52', 'x-xss-protection': '1; mode=block', 'x-content-type-options': 'nosniff', 'expires': 'Sat, 20 Oct 2012 06:25:19 GMT', 'server': 'GSE', '-content-encoding': 'gzip', 'cache-control': 'private, max-age=0', 'date': 'Sat, 20 Oct 2012 06:25:19 GMT', 'x-frame-options': 'SAMEORIGIN', 'content-type': 'application/json; charset=UTF-8'}
    {
     "error": {
      "code": 500,
      "message": null
     }
    }

如果有人可以提供帮助,我将不胜感激。

谢谢

【问题讨论】:

    标签: python jwt google-api-python-client


    【解决方案1】:

    不使用流程可以做到以下几点:

    您遇到的错误是因为您 a) 已正确通过 API 身份验证,但 b​​) 您使用的用户无权访问您尝试访问的帐户。

    我遇到了同样的问题,通过将 OAuth2 服务帐户电子邮件地址添加到 Analytics 帐户的用户来解决。

    对于您要访问的每个帐户,您必须单独添加。

    【讨论】:

      【解决方案2】:

      有点长镜头,但您是否在项目控制台中打开了 Reseller API?我记得在尝试访问我最初使用的服务以外的服务时遇到了类似的问题。

      编辑:根据下面的 cmets,另一种解决方案是使用 Flow 并将 access_type 设置为 offline 以允许刷新令牌,而无需用户不断重新进行身份验证。

      【讨论】:

      • 是的,我做到了,它适用于 Flow 令牌。但当然,它很快就会过期,所以我不能在没有特权用户在场的情况下提出请求。
      • @NickWoodhams 明白了。我从不喜欢与身份验证搏斗。最后的想法(你知道似乎比我更有知识,所以这可能无关紧要) - 使用 Flow 令牌时,将访问类型设置为脱机有助于缓解过期问题吗?这以前对我有用,但我的用例可能有所不同(并且可能不太复杂)。
      • 不要小看自己,这正是我所需要的。这将规避问题。你知道令牌的有效期是多久吗?
      • @NickWoodhams 哈,我的猜测很幸运,但它对你有用。至于令牌,我实际上相信它会持续到它被撤销。在初始授权后,您将获得刷新令牌,然后不需要其他任何东西。我有一些东西运行了一段时间,还不需要新的令牌。这是一个科学的答案:)
      猜你喜欢
      • 2013-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-04
      • 2023-04-09
      • 1970-01-01
      相关资源
      最近更新 更多