python - 需要登录时使用 python 从 cloud.google.com 下载公共文件
问题描述
我正在尝试在以下位置下载 twitter 错误信息/选举完整性数据集: https ://storage.cloud.google.com/twitter-election-integrity/hashed/ira/ira_media_file_list_hashed.txt
但它需要登录。我没有使用 Google App Engine,只是在我的笔记本电脑上运行 python 3。我编写了以下代码来下载文件:
for a_url in download_urls:
filename = os.path.join(data_path, os.path.basename(a_url))
if not os.path.isfile(filename):
#urllib.request.urlretrieve(a_url, filename)
with open(filename, 'wb') as f:
c = pycurl.Curl()
c.setopt(c.URL, a_url)
c.setopt(c.WRITEDATA, f)
c.setopt(c.CAINFO, certifi.where())
c.perform()
c.close()
有没有办法可以下载这些文件,同时避免登录我的谷歌帐户?
或者有没有一种通过python登录的简单方法?
几乎所有在线信息都是如何在 GAE 环境中执行此操作,我并没有尝试连接到存储桶。
解决方案
提到的 URL 表明文件是从Cloud Storage提供的。由于需要登录,这意味着对象不可公开访问。
提供这些文件的应用程序使用以用户为中心的 OAuth 2.0 流程。从身份验证:
Cloud Storage 使用OAuth 2.0进行 API 身份验证和授权。身份验证是确定客户端身份的过程。
- 以用户为中心的流程允许应用程序从最终用户处获取凭据。用户登录以完成身份验证。
Is there a way I can download these files while avoiding having to log in to my google account?
这里的答案应该是否定的。否则这是一个错误 - 您将能够绕过 Google Cloud 安全性;)
我找不到 的详细信息pycurl
,但curl
它本身并未将 OAuth 2.0 列为受支持。从功能 - curl 可以做什么:
HTTP
- 身份验证:基本、摘要、NTLM (*9) 和协商 (SPNEGO) (*3) 到服务器和代理
所以我认为您将无法使用pycurl
. 至少不是直接的(也许通过代理?)。
一种可能的替代方法是在您的脚本中使用Cloud SDK的gsutil(作为任何其他外部进程启动)。:
- 您首先使用
gcloud auth login
. - 然后您将启动您的脚本,其中的
gsutil
执行将使用先前获得的身份验证令牌
我看到可以gsutil
在没有云 SDK 的情况下以独立模式安装和使用,但我没有以这种方式使用它。也许你的案子值得调查。来自gsutil config
:
该
gsutil config
命令适用于已将 gsutil 作为独立工具安装的用户。该
gsutil config
命令获取 Google Cloud Storage 的访问凭据,并写入一个 boto/gsutil 配置文件,其中包含获取的凭据以及许多其他配置可控值。
推荐阅读
- android-intent - 保持数据在意图之间来自 webhook-in-dialogflow II
- r - For-loop 不会使用 r 插入矩阵中的缺失值
- r - 如何使用 stringr 包从文本向量中删除 URL?
- amazon-web-services - 使用 terraform 创建隔离堆栈,就像 AWS 上的无服务器框架一样
- scala - 隐式解析选择最具体的子类型
- go - 如何使用 Sarama 在多个 goroutines 中消费 Kafka 主题?
- c++ - 无法将带有布尔网格的文本文件读入向量的向量
- php - 无法让 jquery datepicker 在 Wordpress 插件中工作
- python - 使用 boto3 将本地文件夹同步到 s3 存储桶
- delphi - 读取 TextFile 类型的文件(使用 Readln 和/或 Read)是否有文件大小限制?