【问题标题】:generate custom direct download link for google drive link为谷歌驱动链接生成自定义直接下载链接
【发布时间】:2018-05-17 10:29:59
【问题描述】:

我想在不打开网页的情况下生成google drive直接下载链接。

我找到了 1 个网站做同样的事情,但我没有找到他是怎么做的。

以下是无需打开谷歌驱动页面即可生成直接下载链接的网站。

https://links-safety.com/download.php?id=0B475ByfcR9n4a1JMVEZxQno2Tmc

0B475ByfcR9n4a1JMVEZxQno2Tmc 是 google 文件并替换为任何文件。

谁能告诉我该怎么做?我想制作与上述网站相同的页面。

我试过这个网址,但它不起作用。而不是开始下载,而是打开页面。

https://drive.google.com/uc?id=0BwSYfbOPSw89Rno4LTZpSGF6RUE

【问题讨论】:

    标签: php google-drive-api


    【解决方案1】:

    快速浏览网站的源代码,它会生成以下 javascript。

    <script>
        setTimeout(function() {
            window.location.href = "https://doc-0o-a0-docs.googleusercontent.com/docs/securesc/ha0ro937gcuc7l7deffksulhg5h7mbp1/nemv3kbhggb02fn2933p80ec5vsi521t/1512345600000/10410701494873540224/*/0B475ByfcR9n4a1JMVEZxQno2Tmc?e=download";
        }, 300);
    </script>
    

    但是那个网址是从哪里来的呢?

    当控制台确实要求在谷歌上确认时,稍微摆弄一下并观察控制台,您可以看到它执行了一个 POST 请求并返回了一些 json。

    )]}'
    {"disposition":"SCAN_CLEAN","downloadUrl":"https://doc-0c-9k-docs.googleusercontent.com/docs/securesc/aonp7ed1gjmns5tl5di4fl0psa1cppk8/16panrhf9etu7sqgddkaduij5anokf8t/1512345600000/17294955007197410767/17294955007197410767/0ByzJffaEk18uN2ZLeGlIRGVOaDJmWS1WU1RUN3dXUGdtUUx3?e\u003ddownload","fileName":"install.sh","scanResult":"OK","sizeBytes":4936}
    

    所以用 PHP 模拟一下

    向该 url 发出 json POST 请求,google 将使用 json 响应,然后只需剥离 )]}' json 对其进行解码,然后使用标头重定向到文件。

    <?php
    $id = '0B475ByfcR9n4a1JMVEZxQno2Tmc';
    
    $ch = curl_init('https://drive.google.com/uc?id='.$id.'&export=download');                                                                      
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
    curl_setopt($ch, CURLOPT_POSTFIELDS, []);                                                                  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        ... see notice below
    ));                                                                                                                                                                          
    $result = curl_exec($ch);
    
    $object = json_decode(str_replace(')]}\'', '', $result));
    
    exit(header('Location: '. $object->downloadUrl));
    

    编辑 (08-04-18)

    似乎添加了一些额外的标头,如果缺少它会抛出 400 错误请求。没什么大不了的,从您自己的驱动器下载文件时,通过查看请求标头来模拟它仍然很容易。我不愿意分享复制和粘贴解决方案,因为上述方法仍然有效,您只需要添加一些标题,而 StackOverflow 不是免费的编码服务,我也不需要维护我写过的每一个答案。祝你好运。

    【讨论】:

    • 欢迎您,给定的 php 非常粗糙,因此您绝对应该在其中添加一些检查,以避免$result$object-&gt;downloadUrl 为空的情况。快乐编码。
    • 下载文件大小未知,尽管文件大小。如何解决?我想添加自定义标头,例如 header('Content-type: application/zip');
    • 我想要 header('Content-Length: ' . mb_strlen($content)) 和 header('Content-Type: application/octet-stream');在代码中
    • 上述代码中$content在哪里设置?它不是。此代码不下载文件,它只是重定向到下载位置。如果你想代理你需要首先(在服务器上)获取它的文件,那么你可以使用该标头。如果您有新问题,请打开一个新问题。
    • @LawrenceCherone 这个脚本不再工作了。还有其他方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多