有没有办法通过curl或wget下载可公开查看的Google云端硬盘网址?例如,能够执行以下操作:
curl -O myfile.xls https://drive.google.com/uc?export=download&id=1Wb2NfKTQr_dLoFJH0GfM0cx-t4r07IVl
注意,我希望在可公开查看的文件上执行此操作,而无需登录我的Google帐户(或让其他人登录其帐户等)。
如果有帮助,我的cors标题是:
"kind": "drive#file",
"id": "1Wb2NfKTQr_dLoFJH0GfM0cx-t4r07IVl",
答案 0 :(得分:47)
这个方法怎么样?当文件太大时,Google会返回下载文件的代码。您可以使用代码下载该文件。当使用curl下载这样大的文件时,您可以看到如下代码。
<a id="uc-download-link" class="goog-inline-block jfk-button jfk-button-action" href="/uc?export=download&confirm=ABCD&id=### file ID ###">download</a>
confirm=ABCD
的查询对于下载文件非常重要。此代码也包含在cookie中。在cookie中,您可以看到如下。
#HttpOnly_.drive.google.com TRUE /uc TRUE ##### download_warning_##### ABCD
在这种情况下,“ABCD”是代码。为了从cookie中检索代码并下载文件,您可以使用以下脚本。
#!/bin/bash
fileid="### file id ###"
filename="MyFile.csv"
curl -c ./cookie -s -L "https://drive.google.com/uc?export=download&id=${fileid}" > /dev/null
curl -Lb ./cookie "https://drive.google.com/uc?export=download&confirm=`awk '/download/ {print $NF}' ./cookie`&id=${fileid}" -o ${filename}
如果这对你没用,我很抱歉。
答案 1 :(得分:14)
您需要使用-L
开关使curl跟随重定向,并且文件名的正确开关为-o
。您还应该引用URL:
curl -L -o myfile.xls "https://drive.google.com/uc?export=download&id=0B4fk8L6brI_eX1U5Ui1Lb1FpVG8"
答案 2 :(得分:4)
我刚刚检查了@tanaike的答案,它就像一个魅力。但是由@Martin Broadhurst提出并且由theartstarter接受的解决方案却没有。
由于Google会显示有关需要处理的病毒扫描的警告,因此需要使用soc脚本。
我想投票给@ tanaike的回答,但没有足够的声誉来做这件事:)
此外,对于那些不知道如何获取和在谷歌驱动器上的文件ID的人,我想分享这个非常简单的知识。
复制网址 https://drive.google.com/file/d/1FNUZiDDDDDDSSSSSSAAAAAdv42Qgzb6n8d/view?usp=sharing
将其粘贴到某个记事本
享受!
答案 3 :(得分:4)
简单地
RSAParameters pubKey = new RSAParameters();
// Not sure here...
pubKey.Modulus =Convert.FromBase64String(publicKey);
pubKey.Exponent = new byte[] { 1, 0, 1 };
byte[] buffer = System.Text.UTF8Encoding.UTF8.GetBytes(msg);
byte[] sig = Convert.FromBase64String(signature);
RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
provider.ImportParameters(pubKey);
bool isValid = provider.VerifyData(buffer, CryptoConfig.MapNameToOID("SHA256"), sig);
Console.WriteLine("SHA256: " + isValid);
答案 4 :(得分:2)
答案 5 :(得分:1)
最简便的方法(带有真实的Google云端硬盘文件示例)
使用pip
pip install gdown
假设我希望从Google云端硬盘下载cnn_stories.tgz
https://drive.google.com/uc?export=download&id=0BwmD_VLjROrfTHk4NFg2SndKcjQ
请注意链接中的id
URL参数0BwmD_VLjROrfTHk4NFg2SndKcjQ
就是这样!使用gdown
gdown --id 0BwmD_VLjROrfTHk4NFg2SndKcjQ --output cnn_stories.tgz
TLDR: gdown --id {gdrive_file_id} --output {file_name}
命令行参数:
--id : Google drive file ID
--output: Output File name
答案 6 :(得分:1)
自 2019年11月18日起,使用wget从Google云端硬盘下载文件时,我使用了以下方法。对于这种方法,我们需要知道文件大小是小还是小。我无法确定区分大小大小的确切数字,但我想大约是100 MB。但是,您始终可以使用文件中提到的两种方法中的任何一种,因为一种仅适用于小型文件,而另一种仅适用于大型文件。
要遵循的基本步骤
第1步使您的文件共享为“可访问互联网的任何人”。可以通过右键单击文件->单击“共享”选项->单击“高级”单选按钮->将访问权限更改为“网络上的公共”
来完成。步骤2 保存并单击“完成” 第3步再次右键单击该文件,然后单击“获取共享链接”。这会将链接复制到剪贴板。
步骤4 复制?id = 之后的所有内容,直到结束并将其保存到记事本文件中。这是您的FILE_ID,在下面使用。
第4步在执行上述常见步骤之后,请根据文件大小执行以下提到的步骤。
小文件
步骤1 使用命令:
wget --no-check-certificate 'https://docs.google.com/uc?export=download&id=FILE_ID' -O FILE_NAME_ALONG_WITH_SUFFIX
应从上述步骤复制FILE_ID,并且FILE_NAME_ALONG_WITH_SUFFIX是您希望其保存在系统/服务器上的文件的名称。请注意,不要忘记添加后缀(如.zip,.txt等)
第2步运行命令。它可能会显示“将不应用HSTS”作为错误,但可以。您的文件将被复制。
大文件
步骤1 使用命令
wget --no-check-certificate --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=FILE_ID' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=FILE_ID" -O FILE_NAME_ALONG_WITH_SUFFIX && rm -rf /tmp/cookies.txt
在2个位置更改FILE_ID,然后一次更改FILE_NAME_WITH_SUFFIX。
第2步执行命令,它可能会给出与上述相同的错误,但没关系。
希望有帮助。
答案 7 :(得分:0)
要使wget成功处理大文件,请使用要求确认下载的链接。
首先从具有ID的Google驱动器链接中获取信息。您的情况下,该ID为1Wb2NfKTQr_dLoFJH0GfM0cx-t4r07IVl。
然后获取您要下载的文件名。
然后使用以下命令:“”“ wget --load-cookies /tmp/cookies.txt” https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate'https://docs.google.com/uc?export=download&id=FILEID'-O- | sed -rn的/。 确认=([0-9A-Za-z _] +)。 / \ 1 \ n / p')&id = FILEID“ -O FILENAME && rm -rf /tmp/cookies.txt”“ ” 并将FILEID替换为从链接中获取的ID,并将FILENAME变量替换为文件名
有关任何参考,请耐心地https://gist.github.com/iamtekeste/3cdfd0366ebfd2c0d805查看此线程。您可以获得许多有用的方法。
答案 8 :(得分:0)
以下是在 CURL 中逐步执行此操作的最佳方法:
Windows 10 默认具有 CURL,但以下适用于任何机器。
首先生成文件的直接链接。像 this 这样的简单工具会有所帮助,我列出了一些我使用过的工具 here,以防这里的某个工具有一天会失效。
或者只是将下面的 XXX 替换为您的文件 ID。
https://drive.google.com/uc?export=download&id=XXXXXXXXXXXXXXXXXXXXXXXX
注意:知道链接的任何人都应该可以使用云端硬盘文件。说明是here。
现在打开一个新标签并粘贴新生成的链接,这将自动下载文件。
但是,如果它显示臭名昭著的“正在扫描病毒/无法扫描病毒”页面,那么我们还不能将它与 CURL 一起使用。
您必须创建一个 google drive API 并使用以下链接结构:
https://www.googleapis.com/drive/v3/files/XXXXXXXXX?alt=media&key=YYYYYYYYY
XXXXX 是您的文件 ID,而 YYYYY 是 API KEY(当前版本 3)。或者,您可以使用此 generator 工具作为辅助。
但同样,您首先需要 API,因此请前往 HERE 了解如何操作。
现在直接链接已准备就绪,最重要的事情是确保您在 CURL 命令中设置了 USER AGENT,因为如果没有设置,您将收到一条错误消息,提示您已达到限制。这是最后的命令:
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" -L "https://www.googleapis.com/drive/v3/files/XXXXXXXXXXXXXXXXXXX?alt=media&key=YYYYYYYYYYYYYYYYYYYY" -o filename.zip
以上设置为 Latest Chrome on Windows User Agents 但无论如何都可以在任何机器上工作。它只会模仿浏览器,认为它是适用于 Windows 10 和最新版本的 Chrome。参考 here 获取最新版本,因为使用 OLD UA 也会引发错误。
如果你觉得有帮助,请告诉我,
答案 9 :(得分:-3)
curl gdrive.sh | bash -s 0B4fk8L6brI_eX1U5Ui1Lb1FpVG8
0B4fk8L6brI_eX1U5Ui1Lb1FpVG8 是文件ID。