如何通过 curl 或 wget 下载 Google 驱动器 url
How to download a Google Drive url via curl or wget
有没有办法通过 curl 或 wget 下载 publicly-viewable Google 驱动器 url?例如,能够执行以下操作:
curl -O myfile.xls https://drive.google.com/uc?export=download&id=1Wb2NfKTQr_dLoFJH0GfM0cx-t4r07IVl
请注意,我希望在 publicly-viewable 文件上执行此操作,而无需登录我的 Google 帐户(或让其他人登录到他们的帐户等)。
如果有帮助,我有的 cors headers 是:
"kind": "drive#file",
"id": "1Wb2NfKTQr_dLoFJH0GfM0cx-t4r07IVl",
您需要使用 -L
开关使 curl 跟随重定向,文件名的正确开关是 -o
。您还应该引用 URL:
curl -L -o myfile.xls "https://drive.google.com/uc?export=download&id=0B4fk8L6brI_eX1U5Ui1Lb1FpVG8"
这个方法怎么样?当文件这么大时,Google returns一个下载文件的代码。您可以使用代码下载文件。使用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}
如果这对您没有用,我很抱歉。
更新于 2022 年 2 月 17 日
最近好像改了这个流程的规范。所以我更新了这个答案。 要从 Google 驱动器下载大尺寸的公开共享文件,您可以使用以下脚本。
#!/bin/bash
fileid="### file id ###"
filename="MyFile.csv"
html=`curl -c ./cookie -s -L "https://drive.google.com/uc?export=download&id=${fileid}"`
curl -Lb ./cookie "https://drive.google.com/uc?export=download&`echo ${html}|grep -Po '(confirm=[a-zA-Z0-9\-_]+)'`&id=${fileid}" -o ${filename}
在这种情况下,下载的 ID 是从 HTML 数据中检索的,如下所示。
<form id="downloadForm" action="https://drive.google.com/uc?export=download&id={fileId}&confirm={value for downloading}" method="post">
当你想从Google驱动器下载一个小尺寸的公共共享文件时,你可以使用下面的命令。
curl -L "https://drive.google.com/uc?export=download&id=### fileId ###" -o sampleoutput.csv
我刚刚查看了@tanaike 的答案,它非常有效。但是@Martin Broadhurst 提出并被主题发起者接受的解决方案没有。
因为google显示病毒扫描警告,需要处理,需要soc脚本。
我想为@tanaike 的回答投票,但没有足够的声誉来做到这一点:)
此外,对于那些不知道如何获取 google 驱动器上的文件 ID 的人,我想分享这个非常简单的知识。
- go to your gDrive
- right click on it and select "Share option"
- choose public share for all, who have a link with no login required
复制URL
https://drive.google.com/file/d/1FNUZiDDDDDDSSSSSSAAAAAdv42Qgzb6n8d/view?usp=sharing
粘贴到某个记事本
- ID 是 URL 的一部分:
1FNUZiDDDDDDSSSSSAAAAAdv42Qgzb6n8d
尽情享受吧!
curl gdrive.sh | bash -s 0B4fk8L6brI_eX1U5Ui1Lb1FpVG8
0B4fk8L6brI_eX1U5Ui1Lb1FpVG8 是文件 ID。
最简单最好的方法(以真实的Google驱动文件为例)
使用 pip
安装 gdown
- 命令 -
pip install gdown
假设我想从 Google Drive
下载 cnn_stories.tgz
- 下载Link:
https://drive.google.com/uc?export=download&id=0BwmD_VLjROrfTHk4NFg2SndKcjQ
请注意link
中的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
简直
wget --no-check-certificate -r 'https://docs.google.com/uc?export=download&id=FILEID' -O DESTINEATION_FILENAME
截至 2019 年 11 月 18 日 使用 wget 从 Google 驱动器下载文件,我使用了以下方法。对于这种方法,我们需要知道我们的文件大小是小猫还是大猫。我无法计算出区分大小的确切数字,但我想它大约是 100 MB。但是您始终可以对您的文件使用上述两种方法中的任何一种,因为一种只适用于小型文件,另一种适用于大型文件。
要遵循的基本步骤
步骤 1 将您的文件设为 "Accessible to anyone having internet" 共享。这可以通过右键单击文件 --> 单击共享选项 --> 单击高级单选按钮 --> 更改对 "Public On the web"
的访问权限来完成
步骤 2 保存并点击完成
步骤 3 再次右键单击该文件并单击 "Get Shareable Link"。这会将 link 复制到剪贴板。
第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 运行 命令。它可能会显示 "Will not apply 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_]+).*/\n/p')&id=FILE_ID" -O FILE_NAME_ALONG_WITH_SUFFIX && rm -rf /tmp/cookies.txt
在 2 个位置更改 FILE_ID 并 FILE_NAME_WITH_SUFFIX 一次。
步骤2执行命令,可能会报同样的错误,不过没关系。
希望对您有所帮助..
无需安装任何外部工具。
- 在 google 驱动器
上创建文件 public
- 在隐身模式下打开共享link
- 点击下载按钮
- 从网络选项卡复制为 curl 下载请求
- 在服务器上粘贴复制的请求并附加输出(
--output <FILENAME>
)标志
要使 wget 成功处理大文件,请使用要求确认下载的 link。
首先从具有 ID 的 google 驱动器 link 获取信息。在您的情况下,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 's/.confirm=([0-9A-Za-z_]+)./\n/p') &id=FILEID" -O 文件名 && rm -rf /tmp/cookies.txt"""
并将 FILEID 替换为您从 link 获得的 ID,并将 FILENAME 变量替换为您的文件名
如有任何参考,请耐心查看此线程 https://gist.github.com/iamtekeste/3cdfd0366ebfd2c0d805。你可以获得很多有用的方法。
以下是在 CURL 中逐步执行此操作的最佳方法:
Windows 10 个默认有 CURL,但以下适用于任何机器。
首先生成文件的直接 Link。一个像 this will help, I have listed some of what I used here 这样的简单工具,以防万一这里的那个有一天会坏掉。
或者将下面的 XXX 替换为您的文件 ID。
https://drive.google.com/uc?export=download&id=XXXXXXXXXXXXXXXXXXXXXXXX
注意:拥有 link 的任何人都应该可以访问驱动器文件。说明是 here.
现在打开一个新选项卡并粘贴新生成的 links,这将自动下载文件。
但是,如果它显示臭名昭著的“正在扫描病毒/无法扫描病毒”页面,那么我们还不能将其与 CURL 一起使用。
您必须创建一个 google 驱动器 API 并改用下面的 link 结构:
https://www.googleapis.com/drive/v3/files/XXXXXXXXX?alt=media&key=YYYYYYYYY
XXXXX 是您的文件 ID,YYYYY 是 API KEY(当前版本 3)。或者,您可以使用此 generator 工具作为辅助。
但是您同样需要先 API,因此请前往 HERE 获取有关如何操作的说明。
现在直接 link 已准备就绪,最重要的是确保在 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 but should work on any machines regardless. It only mimics the browser thinking it's Chrome for Windows 10 and latest. refer here,因为使用旧 UA 也会引发错误。
如果您觉得有帮助,请告诉我,
对于小文件
运行 在您的终端上执行以下命令:
wget --no-check-certificate 'https://docs.google.com/uc?export=download&id=FILEID' -O FILENAME
在上面的命令中,通过上面提取的 id 更改 FILEID 并重命名 FILENAME 以供您自己简单使用。
对于大文件
运行 以下命令对 FILEID 和 FILENAME 进行了必要的更改:
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 's/.*confirm=([0-9A-Za-z_]+).*/\n/p')&id=FILEID" -O FILENAME && rm -rf /tmp/cookies.txt
您也可以使用 this 单一用途网站为您生成此命令。
您可以使用名为 gdrive 的工具代替 wget/curl。它基本上是一个从命令行访问 google 驱动器帐户的工具。按照此示例为 Linux 机器设置它:
- 首先下载gdrive的执行文件here.
- 解压得到可执行文件
gdrive
。现在通过执行命令更改文件的权限
chmod +x gdrive
.
- 运行
./gdrive about
你会得到一个 URL 要求你输入验证码。
按照提示中的指示复制 link 并转到 浏览器 上的 URL,然后登录到您的 Google Drive 帐户并授予权限。最后你会得到一些验证码。复制它。
- 返回到您之前的终端并粘贴刚刚复制的验证码。然后验证
你的信息在那里。
现在,一旦成功完成上述身份验证过程,您就可以使用下面提到的命令浏览驱动器上的文件。
./gdrive list # List all files' information in your account
./gdrive list -q "name contains 'University'" # serch files by name
./gdrive download fileID # Download some file. You can find the fileID from the 'gdrive list' result.
./gdrive upload filename # Upload a local file to your google drive account.
./gdrive mkdir # Create new folder
该过程只需完成一次,并且可以无缝运行。
有没有办法通过 curl 或 wget 下载 publicly-viewable Google 驱动器 url?例如,能够执行以下操作:
curl -O myfile.xls https://drive.google.com/uc?export=download&id=1Wb2NfKTQr_dLoFJH0GfM0cx-t4r07IVl
请注意,我希望在 publicly-viewable 文件上执行此操作,而无需登录我的 Google 帐户(或让其他人登录到他们的帐户等)。
如果有帮助,我有的 cors headers 是:
"kind": "drive#file",
"id": "1Wb2NfKTQr_dLoFJH0GfM0cx-t4r07IVl",
您需要使用 -L
开关使 curl 跟随重定向,文件名的正确开关是 -o
。您还应该引用 URL:
curl -L -o myfile.xls "https://drive.google.com/uc?export=download&id=0B4fk8L6brI_eX1U5Ui1Lb1FpVG8"
这个方法怎么样?当文件这么大时,Google returns一个下载文件的代码。您可以使用代码下载文件。使用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}
如果这对您没有用,我很抱歉。
更新于 2022 年 2 月 17 日
最近好像改了这个流程的规范。所以我更新了这个答案。 要从 Google 驱动器下载大尺寸的公开共享文件,您可以使用以下脚本。
#!/bin/bash
fileid="### file id ###"
filename="MyFile.csv"
html=`curl -c ./cookie -s -L "https://drive.google.com/uc?export=download&id=${fileid}"`
curl -Lb ./cookie "https://drive.google.com/uc?export=download&`echo ${html}|grep -Po '(confirm=[a-zA-Z0-9\-_]+)'`&id=${fileid}" -o ${filename}
在这种情况下,下载的 ID 是从 HTML 数据中检索的,如下所示。
<form id="downloadForm" action="https://drive.google.com/uc?export=download&id={fileId}&confirm={value for downloading}" method="post">
当你想从Google驱动器下载一个小尺寸的公共共享文件时,你可以使用下面的命令。
curl -L "https://drive.google.com/uc?export=download&id=### fileId ###" -o sampleoutput.csv
我刚刚查看了@tanaike 的答案,它非常有效。但是@Martin Broadhurst 提出并被主题发起者接受的解决方案没有。
因为google显示病毒扫描警告,需要处理,需要soc脚本。
我想为@tanaike 的回答投票,但没有足够的声誉来做到这一点:)
此外,对于那些不知道如何获取 google 驱动器上的文件 ID 的人,我想分享这个非常简单的知识。
- go to your gDrive
- right click on it and select "Share option"
- choose public share for all, who have a link with no login required
复制URL https://drive.google.com/file/d/1FNUZiDDDDDDSSSSSSAAAAAdv42Qgzb6n8d/view?usp=sharing
粘贴到某个记事本
- ID 是 URL 的一部分: 1FNUZiDDDDDDSSSSSAAAAAdv42Qgzb6n8d
尽情享受吧!
curl gdrive.sh | bash -s 0B4fk8L6brI_eX1U5Ui1Lb1FpVG8
0B4fk8L6brI_eX1U5Ui1Lb1FpVG8 是文件 ID。
最简单最好的方法(以真实的Google驱动文件为例)
使用
安装 gdownpip
- 命令 -
pip install gdown
- 命令 -
假设我想从 Google Drive
下载 cnn_stories.tgz- 下载Link:
https://drive.google.com/uc?export=download&id=0BwmD_VLjROrfTHk4NFg2SndKcjQ
- 下载Link:
请注意link
中的就是这样!使用
下载文件gdown
gdown --id 0BwmD_VLjROrfTHk4NFg2SndKcjQ --output cnn_stories.tgz
id
URL参数0BwmD_VLjROrfTHk4NFg2SndKcjQ
TLDR: gdown --id {gdrive_file_id} --output {file_name}
命令行参数:
--id : Google drive file ID
--output: Output File name
简直
wget --no-check-certificate -r 'https://docs.google.com/uc?export=download&id=FILEID' -O DESTINEATION_FILENAME
截至 2019 年 11 月 18 日 使用 wget 从 Google 驱动器下载文件,我使用了以下方法。对于这种方法,我们需要知道我们的文件大小是小猫还是大猫。我无法计算出区分大小的确切数字,但我想它大约是 100 MB。但是您始终可以对您的文件使用上述两种方法中的任何一种,因为一种只适用于小型文件,另一种适用于大型文件。
要遵循的基本步骤
步骤 1 将您的文件设为 "Accessible to anyone having internet" 共享。这可以通过右键单击文件 --> 单击共享选项 --> 单击高级单选按钮 --> 更改对 "Public On the web"
的访问权限来完成步骤 2 保存并点击完成 步骤 3 再次右键单击该文件并单击 "Get Shareable Link"。这会将 link 复制到剪贴板。
第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 运行 命令。它可能会显示 "Will not apply 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_]+).*/\n/p')&id=FILE_ID" -O FILE_NAME_ALONG_WITH_SUFFIX && rm -rf /tmp/cookies.txt
在 2 个位置更改 FILE_ID 并 FILE_NAME_WITH_SUFFIX 一次。
步骤2执行命令,可能会报同样的错误,不过没关系。
希望对您有所帮助..
无需安装任何外部工具。
- 在 google 驱动器 上创建文件 public
- 在隐身模式下打开共享link
- 点击下载按钮
- 从网络选项卡复制为 curl 下载请求
- 在服务器上粘贴复制的请求并附加输出(
--output <FILENAME>
)标志
要使 wget 成功处理大文件,请使用要求确认下载的 link。
首先从具有 ID 的 google 驱动器 link 获取信息。在您的情况下,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 's/.confirm=([0-9A-Za-z_]+)./\n/p') &id=FILEID" -O 文件名 && rm -rf /tmp/cookies.txt""" 并将 FILEID 替换为您从 link 获得的 ID,并将 FILENAME 变量替换为您的文件名
如有任何参考,请耐心查看此线程 https://gist.github.com/iamtekeste/3cdfd0366ebfd2c0d805。你可以获得很多有用的方法。
以下是在 CURL 中逐步执行此操作的最佳方法:
Windows 10 个默认有 CURL,但以下适用于任何机器。
首先生成文件的直接 Link。一个像 this will help, I have listed some of what I used here 这样的简单工具,以防万一这里的那个有一天会坏掉。
或者将下面的 XXX 替换为您的文件 ID。
https://drive.google.com/uc?export=download&id=XXXXXXXXXXXXXXXXXXXXXXXX
注意:拥有 link 的任何人都应该可以访问驱动器文件。说明是 here.
现在打开一个新选项卡并粘贴新生成的 links,这将自动下载文件。
但是,如果它显示臭名昭著的“正在扫描病毒/无法扫描病毒”页面,那么我们还不能将其与 CURL 一起使用。
您必须创建一个 google 驱动器 API 并改用下面的 link 结构:
https://www.googleapis.com/drive/v3/files/XXXXXXXXX?alt=media&key=YYYYYYYYY
XXXXX 是您的文件 ID,YYYYY 是 API KEY(当前版本 3)。或者,您可以使用此 generator 工具作为辅助。
但是您同样需要先 API,因此请前往 HERE 获取有关如何操作的说明。
现在直接 link 已准备就绪,最重要的是确保在 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 but should work on any machines regardless. It only mimics the browser thinking it's Chrome for Windows 10 and latest. refer here,因为使用旧 UA 也会引发错误。
如果您觉得有帮助,请告诉我,
对于小文件
运行 在您的终端上执行以下命令:
wget --no-check-certificate 'https://docs.google.com/uc?export=download&id=FILEID' -O FILENAME
在上面的命令中,通过上面提取的 id 更改 FILEID 并重命名 FILENAME 以供您自己简单使用。
对于大文件
运行 以下命令对 FILEID 和 FILENAME 进行了必要的更改:
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 's/.*confirm=([0-9A-Za-z_]+).*/\n/p')&id=FILEID" -O FILENAME && rm -rf /tmp/cookies.txt
您也可以使用 this 单一用途网站为您生成此命令。
您可以使用名为 gdrive 的工具代替 wget/curl。它基本上是一个从命令行访问 google 驱动器帐户的工具。按照此示例为 Linux 机器设置它:
- 首先下载gdrive的执行文件here.
- 解压得到可执行文件
gdrive
。现在通过执行命令更改文件的权限chmod +x gdrive
. - 运行
./gdrive about
你会得到一个 URL 要求你输入验证码。 按照提示中的指示复制 link 并转到 浏览器 上的 URL,然后登录到您的 Google Drive 帐户并授予权限。最后你会得到一些验证码。复制它。 - 返回到您之前的终端并粘贴刚刚复制的验证码。然后验证 你的信息在那里。
现在,一旦成功完成上述身份验证过程,您就可以使用下面提到的命令浏览驱动器上的文件。
./gdrive list # List all files' information in your account
./gdrive list -q "name contains 'University'" # serch files by name
./gdrive download fileID # Download some file. You can find the fileID from the 'gdrive list' result.
./gdrive upload filename # Upload a local file to your google drive account.
./gdrive mkdir # Create new folder
该过程只需完成一次,并且可以无缝运行。