如何通过curl或wget下载Google Drive网址

时间:2018-01-06 23:51:26

标签: curl google-drive-api wget

有没有办法通过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",

10 个答案:

答案 0 :(得分:47)

这个方法怎么样?当文件太大时,Google会返回下载文件的代码。您可以使用代码下载该文件。当使用curl下载这样大的文件时,您可以看到如下代码。

<a id="uc-download-link" class="goog-inline-block jfk-button jfk-button-action" href="/uc?export=download&amp;confirm=ABCD&amp;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的人,我想分享这个非常简单的知识。

  1. go to your gDrive
  2. right click on it and select "Share option"
  3. choose public share for all, who have a link with no login required
  4. 复制网址 https://drive.google.com/file/d/1FNUZiDDDDDDSSSSSSAAAAAdv42Qgzb6n8d/view?usp=sharing

  5. 将其粘贴到某个记事本

  6. ID是网址的一部分: 的 1FNUZiDDDDDDSSSSSSAAAAAdv42Qgzb6n8d
  7. 享受!

答案 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);

source

答案 4 :(得分:2)

无需安装任何外部工具。

  1. 在Google云端硬盘上公开文件
  2. 以隐身模式打开共享链接
  3. 点击下载按钮
  4. 从网络标签复制为curl下载请求
  5. 将复制的请求粘贴到服务器上并附加output(-output)标志

Step 4 Step 5

答案 5 :(得分:1)

最简便的方法(带有真实的Google云端硬盘文件示例)

  1. 使用pip

    安装gdown
    • 命令-pip install gdown
  2. 假设我希望从Google云端硬盘下载cnn_stories.tgz

    • 下载链接:https://drive.google.com/uc?export=download&id=0BwmD_VLjROrfTHk4NFg2SndKcjQ
  3. 请注意链接中的id URL参数0BwmD_VLjROrfTHk4NFg2SndKcjQ

  4. 就是这样!使用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。