gcloud auth print-access-token
给了我一个我以后可以使用的Bearer令牌。令牌看起来像:
Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg
如何在不使用gcloud的情况下获得这样的令牌,最好是通过一些python代码。
#!/usr/bin/python
from oauth2client.client import GoogleCredentials
credentials = GoogleCredentials.get_application_default()
credentials.get_access_token()
token1 = credentials.access_token
# magic piece of code to convert token1 into the
# example Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg
# type.
答案 0 :(得分:2)
您的代码段生成的令牌是标头所需的令牌。您应该只需设置"授权"标题为com.netflix.astyanax.connectionpool.exceptions.PoolTimeoutException:
PoolTimeoutException: [host=104.197.131.17(104.197.131.17):9160,
latency=10000(10000), attempts=1]Timed out waiting for connection
at com.netflix.astyanax.connectionpool.impl.SimpleHostConnectionPool.waitForConnection(SimpleHostConnectionPool.java:231)
。
请注意,访问令牌会过期,因此如果您有一个长期存在的应用程序,则不能简单地存储访问令牌并继续使用它。最终,您将获得401,并且您必须获得新的访问令牌。
最佳做法是让HTTP调用自动处理401s以获得新的access_token。这通常也会为您处理缓存访问令牌,因此您不必担心这一点。事实上你可以这样做:
"Bearer "+token1
然后全天使用http = credentials.authorize(httplib2.Http())
来处理您的请求,而不必担心访问令牌。