我很难获得“简单上传”功能。 GCS JSON API中的方法可以在Python中工作。文档(https://developers.google.com/storage/docs/json_api/v1/how-tos/upload#simple)使其显得微不足道,但我无法通过授权。我不完全理解授权/认证/密钥/令牌,但我正在尝试。我一直试图上传的存储桶允许完全读写(他们是公开的),并且我已经生成并尝试了我能想到的每个组合和排列的密钥
我的代码:
def postTest():
headers = {'Host':'www.googleapis.com','Authorization':'Bearer? WHATGOESINHERE?','Content-Length': 0, 'Content-Type': "text/plain"}
files = {'file': ('report.txt', 'justsomeblankityblanktext\n')}
r = requests.post("https://storage.googleapis.com/upload/storage/v1beta2/b/NOTACTUALLYAREALBUCKETOBVIOUSLY/o?uploadType=media&name=testi.txt", headers=headers, files=files)
print(r.request.headers)
print(r.url)
print(r.text)
回复:
CaseInsensitiveDict({'Content-Length': '172', 'Accept-Encoding': 'gzip, deflate, compress', 'Accept': '*/*', 'User-Agent': 'python-requests/2.2.1 CPython/2.7.6 Darwin/13.1.0', 'Host': 'www.googleapis.com', 'Content-Type': 'text/plain', 'Authorization': 'Bearer? WHATGOESINHERE?'})
https://storage.googleapis.com/upload/storage/v1beta2/b/NOTACTUALLYAREALBUCKETOBVIOUSLY/o?uploadType=media&name=testi.txt
{
"error": {
"errors": [
{
"domain": "global",
"reason": "authError",
"message": "Invalid Credentials",
"locationType": "header",
"location": "Authorization"
}
],
"code": 401,
"message": "Invalid Credentials"
}
}
所以,我的问题是关于授权'标头中的键值对。什么样的授权令牌'应该包括在内吗?
答案 0 :(得分:0)
OAuth2授权有点棘手。我们的想法是,不是一直使用您的真实密码,而是使用您的密码一次,以获得适用于下一个小时左右的临时代码。然后你将这个代码用于所有东西,如果由于某种原因它被泄露,它将在一小时左右停止工作。为了增加更复杂的功能,OAuth还允许您要求凭据充当最终用户(例如,如果您在网络上创建云存储查看器,您可能希望让人们登录,但您不想要知道他们的谷歌密码。)
获取访问令牌的方法是向Google的OAuth2服务询问。您可以通过几种方式执行此操作,具体取决于您要授权的方式。如果您的应用程序始终充当自身,您可以为其下载可用于创建断言的私钥。 Here're the instructions for this
另一个常见用例是一个充当你的应用。在这种情况下,您将创建一个指向登录URL的链接,让用户在那里导航并登录,然后您的应用程序将收到一个密钥(或者用户将获得一个粘贴到您的应用程序中的密钥),它将为您提供永久的“刷新令牌”,您可以在需要时使用它来请求新的访问令牌。 Instructions for installed apps are here
还有其他一些东西。最终它有点复杂,这就是为什么Google提供了一个可以为您处理OAuth2授权的Python客户端。您仍然需要考虑要使用哪种身份验证,但Google APIs Python Library可以处理大部分混乱的细节。