我想在不打开网页的情况下生成谷歌驱动器直接下载链接。
我发现有一个网站做同样的事情,但我没有发现他是怎么做的。
下面是生成直接下载链接而不打开谷歌驱动器页面的网站。
https://links-safety.com/download.php?id=0B475ByfcR9n4a1JMVEZxQno2Tmc
0B475ByfcR9n4a1JMVEZxQno2Tmc是谷歌文件并替换为任何文件。
任何人都可以告诉我该怎么做?我想像上面的网站一样制作相同的页面。
我尝试了这个网址,但它没有用。而不是开始下载它打开页面。
答案 0 :(得分:3)
快速浏览一下网站的来源,它会生成以下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模拟它
向该网址发出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 Bad Request。没什么大不了的,从你自己的驱动器下载文件时,通过查看请求标题来模拟它仍然很容易。我不愿意共享一个复制和粘贴解决方案,因为上面仍然有效,你只需要添加一些标题,StackOverflow不是一个免费的编码服务,我也不需要保持我写过的每一个答案。祝你好运。