从谷歌驱动器wget/curl大文件

 撩人无聊的青春 发布于 2022-12-31 17:31

我正在尝试从脚本中的谷歌驱动器下载文件,我在这方面遇到了一些麻烦.我正在尝试下载的文件在这里.

我在网上看了很多,我终于设法让其中一个下载了.我得到了文件的UID和较小的(1.6MB)下载,但较大的文件(3.7GB)总是重定向到一个页面,询问我是否要在没有病毒扫描的情况下继续下载.有人可以帮助我通过那个屏幕吗?

这是我如何使第一个文件工作 -

curl -L "https://docs.google.com/uc?export=download&id=0Bz-w5tutuZIYeDU0VDRFWG9IVUE" > phlat-1.0.tar.gz

当我在另一个文件上运行相同的时候,

curl -L "https://docs.google.com/uc?export=download&id=0Bz-w5tutuZIYY3h5YlMzTjhnbGM" > index4phlat.tar.gz

我得到以下输出 - 在此输入图像描述

我注意到链接中的倒数第三行,&confirm=JwkK其中有一个随机的4个字符串,但建议有一种方法可以向我的URL添加确认.我访问过的其中一个链接建议&confirm=no_antivirus但是这不起作用.

我希望有人可以帮忙解决这个问题!

提前致谢.

16 个回答
  • 您可以使用开源Linux/Unix命令行工具gdrive.

    要安装它:

      下载二进制文件.例如,选择适合您的架构的那个gdrive-linux-x64.

      将其复制到您的路径.

      sudo cp gdrive-linux-x64 /usr/local/bin/gdrive;
      sudo chmod a+x /usr/local/bin/gdrive;
      

    要使用它:

      确定Google云端硬盘文件ID.为此,右键单击Google云端硬盘网站中的所需文件,然后选择"获取链接...".它将返回类似的东西https://drive.google.com/open?id=0B7_OwkDsUIgFWXA1B2FPQfV5S8H.获取后面的字符串?id=并将其复制到剪贴板.那是文件的ID.

      下载文件.当然,请在以下命令中使用您的文件ID.

      gdrive download 0B7_OwkDsUIgFWXA1B2FPQfV5S8H
      

    首次使用时,该工具需要获取Google Drive API的访问权限.为此,它会显示一个您必须在浏览器中访问的链接,然后您将获得一个验证码以复制并粘贴回该工具.然后下载自动开始.没有进度指示器,但您可以在文件管理器或第二个终端中观察进度.

    资料来源: Tobi对另一个答案的评论.

    其他技巧:速率限制.gdrive以有限的最大速率下载(不要淹没网络...),您可以使用这样的命令(pv是PipeViewer):

    gdrive download --stdout 0B7_OwkDsUIgFWXA1B2FPQfV5S8H | \
      pv -br -L 90k | \
      cat > file.ext
    

    这将显示下载的数据量(-b)和下载速率(),并将该速率-r限制为90 kiB/s(-L 90k).

    2022-12-31 17:32 回答
  • 简单的方法:

    (如果您只需要一次性下载)

      转到包含下载链接的Google云端硬盘网页

      打开浏览器控制台并转到"网络"选项卡

      单击下载链接

      等待文件开始下载,找到相应的请求(应该是列表中的最后一个),然后你可以取消下载

      右键单击请求,然后单击"复制为cURL"(或类似)

    你应该得到类似的东西:

    curl 'https://doc-0s-80-docs.googleusercontent.com/docs/securesc/aa51s66fhf9273i....................blah blah blah...............gEIqZ3KAQ==' --compressed
    

    将它放在你的控制台中,添加> my-file-name.extension到最后(否则它会将文件写入你的控制台),然后按回车:)

    2022-12-31 17:32 回答
  • ggID='put_googleID_here'  
    ggURL='https://drive.google.com/uc?export=download'  
    filename="$(curl -sc /tmp/gcokie "${ggURL}&id=${ggID}" | grep -o '="uc-name.*</span>' | sed 's/.*">//;s/<.a> .*//')"  
    getcode="$(awk '/_warning_/ {print $NF}' /tmp/gcokie)"  
    curl -Lb /tmp/gcokie "${ggURL}&confirm=${getcode}&id=${ggID}" -o "${filename}"  
    

    它是如何工作的?
    用curl获取cookie文件和html代码.
    管道html到grep和sed并搜索文件名.
    使用awk从cookie文件中获取确认代码.
    最后下载启用了cookie的文件,确认代码和文件名.

    curl -Lb /tmp/gcokie "https://drive.google.com/uc?export=download&confirm=Uq6r&id=0B5IRsLTwEO6CVXFURmpQZ1Jxc0U" -o "SomeBigFile.zip"
    

    如果你不需要文件名变量curl可以猜它
    -L跟着重定向
    -O Remote-name
    -J Remote-header-name

    curl -sc /tmp/gcokie "${ggURL}&id=${ggID}" >/dev/null  
    getcode="$(awk '/_warning_/ {print $NF}' /tmp/gcokie)"  
    curl -LOJb /tmp/gcokie "${ggURL}&confirm=${getcode}&id=${ggID}" 
    

    要从URL中提取Google文件ID,您可以使用:

    echo "gURL" | egrep -o '(\w|-){26,}'  
    # match more than 26 word characters  
    

    要么

    echo "gURL" | sed 's/[^A-Za-z0-9_-]/\n/g' | sed -rn '/.{26}/p'  
    # replace non-word characters with new line,   
    # print only line with more than 26 word characters 
    

    2022-12-31 17:32 回答
  • 截至2018年3月更新.

    我尝试了在其他答案中给出的各种技术,将我的文件(6 GB)直接从Google驱动器下载到我的AWS ec2实例,但它们都不起作用(可能是因为它们已经老了).

    因此,对于其他人的信息,以下是我成功的方法:

      右键单击要下载的文件,单击"共享",在"链接共享"部分下,选择"具有此链接的任何人都可以编辑".

      复制链接.它应该采用以下格式:https://drive.google.com/file/d/FILEIDENTIFIER/view?usp=sharing

      从链接复制FILEIDENTIFIER部分.

      将以下脚本复制到文件中.它使用curl并处理cookie以自动下载文件.

      #!/bin/bash
      fileid="FILEIDENTIFIER"
      filename="FILENAME"
      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}
      

      如上所示,将FILEIDENTIFIER粘贴到脚本中.记得保留双引号!

      提供文件的名称以代替FILENAME.请记住保留双引号并在FILENAME中包含扩展名(例如,myfile.zip).

      现在,通过在终端中运行此命令来保存文件并使文件可执行sudo chmod +x download-gdrive.sh.

      使用`./download-gdrive.sh"运行脚本.

    PS:这是上面给出的脚本的Github要点:https://gist.github.com/amit-chahar/db49ce64f46367325293e4cce13d2424

    2022-12-31 17:32 回答
  • - 更新 -

    要下载文件,请先youtube-dl从此处获取适用于python 的文件:

    youtube-dl:https://rg3.github.io/youtube-dl/download.html

    或安装pip

    sudo python2.7 -m pip install --upgrade youtube_dl 
    # or 
    # sudo python3.6 -m pip install --upgrade youtube_dl
    

    更新:

    我刚发现:

      右键单击要从drive.google.com下载的文件

      请点击 Get Sharable link

      开启 Link sharing on

      点击 Sharing settings

      单击顶部下拉列表中的选项

      点击更多

      选择 [x] On - Anyone with a link

      复制链接

    https://drive.google.com/file/d/3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR/view?usp=sharing       
    (This is not a real file address)
    

    在以下位置复制ID https://drive.google.com/file/d/

    3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR
    

    将此粘贴到命令行中:

    youtube-dl https://drive.google.com/open?id=
    

    将ID粘贴到后面 open?id=

    youtube-dl https://drive.google.com/open?id=3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR
    
    [GoogleDrive] 3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR: Downloading webpage
    [GoogleDrive] 3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR: Requesting source file
    [download] Destination: your_requested_filename_here-3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR
    [download] 240.37MiB at  2321.53MiB/s (00:01)
    

    希望能帮助到你

    2022-12-31 17:32 回答
  • 我编写了一个Python代码段,可以从Google云端硬盘下载文件,并提供可共享的链接.它的工作原理截至2017年8月.

    剪辑不使用gdrive,也不使用Google Drive API.它使用请求模块.

    从Google云端硬盘下载大型文件时,单个GET请求是不够的.需要第二个,这个有一个名为confirm的额外URL参数,其值应该等于某个cookie的值.

    import requests
    
    def download_file_from_google_drive(id, destination):
        def get_confirm_token(response):
            for key, value in response.cookies.items():
                if key.startswith('download_warning'):
                    return value
    
            return None
    
        def save_response_content(response, destination):
            CHUNK_SIZE = 32768
    
            with open(destination, "wb") as f:
                for chunk in response.iter_content(CHUNK_SIZE):
                    if chunk: # filter out keep-alive new chunks
                        f.write(chunk)
    
        URL = "https://docs.google.com/uc?export=download"
    
        session = requests.Session()
    
        response = session.get(URL, params = { 'id' : id }, stream = True)
        token = get_confirm_token(response)
    
        if token:
            params = { 'id' : id, 'confirm' : token }
            response = session.get(URL, params = params, stream = True)
    
        save_response_content(response, destination)    
    
    
    if __name__ == "__main__":
        import sys
        if len(sys.argv) is not 3:
            print("Usage: python google_drive.py drive_file_id destination_file_path")
        else:
            # TAKE ID FROM SHAREABLE LINK
            file_id = sys.argv[1]
            # DESTINATION FILE ON YOUR DISK
            destination = sys.argv[2]
            download_file_from_google_drive(file_id, destination)
    

    2022-12-31 17:32 回答
  • 2018年6月 最简单的方式对我有用

    pip install gdown

    gdown https://drive.google.com/uc?id=file_id

    file_id应该是这个样子0Bz8a_Dbh9QhbNU3SGlFaDg

    您可以通过右键单击文件然后获取可共享链接来获取它.在开放访问文件上测试.我不确定它是否适用于目录.在Google Colab上测试过.

    2022-12-31 17:33 回答
  • 我在Google云端硬盘上遇到了同样的问题.

    这是我使用Links 2解决问题的方法.

      在PC上打开浏览器,在Google云端硬盘中导航到您的文件.为您的文件提供公共链接.

      将公共链接复制到剪贴板(例如右键单击,复制链接地址)

      打开一个终端.如果你要下载到另一台PC /服务器/机器,你应该在这一点上SSH

      安装链接2(debian/ubuntu方法,使用你的发行版或操作系统等效)

      sudo apt-get install links2

      将链接粘贴到您的终端并使用链接打开它,如下所示:

      links2 "paste url here"

      使用箭头键导航到链接中的下载链接,然后按 Enter

      选择文件名,它将下载您的文件

    2022-12-31 17:33 回答
  • 根据Roshan Sethia的回答

    2018年五月

    使用WGET

      创建一个名为wgetgdrive.sh的shell脚本,如下所示:

      #!/bin/bash
      
      # Get files from Google Drive
      
      # $1 = file ID
      # $2 = file name
      
      URL="https://docs.google.com/uc?export=download&id=$1"
      
      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 $URL -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=$1" -O $2 && rm -rf /tmp/cookies.txt
      

      授予执行脚本的正确权限

      在终端中,运行:

      ./wgetgdrive.sh <file ID> <filename>
      

      例如:

      ./wgetgdrive.sh 1lsDPURlTNzS62xEOAIG98gsaW6x2PYd2 images.zip
      

    2022-12-31 17:33 回答
  • 看看这个问题:使用Google Drive API从Google云端硬盘直接下载

    基本上你必须创建一个公共目录并通过相对引用来访问你的文件

    wget https://googledrive.com/host/LARGEPUBLICFOLDERID/index4phlat.tar.gz
    

    警告:不推荐使用此功能.请参阅评论中的以下警告.

    或者,您可以使用以下脚本:https://github.com/circulosmeos/gdown.pl

    2022-12-31 17:33 回答
  • 使用youtube-dl!

    youtube-dl https://drive.google.com/open?id=ABCDEFG1234567890

    您还可以通过--get-url获取直接下载URL。

    2022-12-31 17:33 回答
  • 最简单的方法是:

      创建下载链接并复制fileID

      使用WGET下载: 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_]+).*/\1\n/p')&id=FILEID" -O FILENAME && rm -rf /tmp/cookies.txt

    2022-12-31 17:33 回答
  • 截至2016年12月,没有答案提出对我有用的内容(来源):

    curl -L https://drive.google.com/uc?id={FileID}
    

    如果Google Drive文件已与拥有该链接的人共享,并且{FileID}?id=共享URL中的后面的字符串.

    虽然我没有查看大文件,但我相信它可能有用.

    2022-12-31 17:33 回答
  • 这是一个快速的方法来做到这一点.

    确保链接是共享的,它看起来像这样:

    https://drive.google.com/open?id=FILEID&authuser=0

    然后,复制该FILEID并像这样使用它

    wget --no-check-certificate 'https://docs.google.com/uc?export=download&id=FILEID' -O FILENAME
    

    2022-12-31 17:33 回答
  • 从Google驱动器下载文件的简单方法,您也可以在colab上下载文件

    pip install gdown
    
    import gdown
    

    然后

    url = 'https://drive.google.com/uc?id=0B9P1L--7Wd2vU3VUVlFnbTgtS2c'
    output = 'spam.txt'
    gdown.download(url, output, quiet=False)
    

    要么

    fileid='0B9P1L7Wd2vU3VUVlFnbTgtS2c'
    
    gdown https://drive.google.com/uc?id=+fileid
    

    文件https://pypi.org/project/gdown/

    2022-12-31 17:33 回答
  • 谷歌驱动器的默认行为是扫描文件中的病毒,如果文件太大,它将提示用户并通知他无法扫描文件.

    目前,我找到的唯一解决方法是与Web共享文件并创建Web资源.

    从谷歌驱动器帮助页面引用:

    使用Drive,您可以将Web资源(如HTML,CSS和Javascript文件)视为网站.

    要托管带有云端硬盘的网页:

      在drive.google.com上打开云端硬盘并选择一个文件.

      单击页面顶部的" 共享"按钮.

      单击共享框右下角的" 高级 ".

      点击更改....

      在Web上选择On - Public,然后单击Save.

      在关闭共享框之前,请在"链接到共享"下方字段中的URL中复制文档ID.文档ID是一个由大写和小写字母组成的字符串,以及URL中斜杠之间的数字.

      共享看起来像"www.googledrive.com/host/[doc id"的网址,其中[doc id]被您在步骤6中复制的文档ID替换.
      任何人都可以查看您的网页.

    在此处找到:https://support.google.com/drive/answer/2881970?hl = zh-CN

    例如,当您公开在Google云端硬盘上共享文件时,sharelink看起来像这样:

    https://drive.google.com/file/d/0B5IRsLTwEO6CVXFURmpQZ1Jxc0U/view?usp=sharing
    

    然后复制文件ID并创建一个googledrive.com linke,如下所示:

    https://www.googledrive.com/host/0B5IRsLTwEO6CVXFURmpQZ1Jxc0U
    

    2022-12-31 17:33 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有