快速浏览一下网站的源代码,它会生成以下javascript.
setTimeout(function() {
window.location.href = "https://doc-0o-a0-docs.googleusercontent.com/docs/securesc/ha0ro937gcuc7l7deffksulhg5h7mbp1/nemv3kbhggb02fn2933p80ec5vsi521t/1512345600000/10410701494873540224/*/0B475ByfcR9n4a1JMVEZxQno2Tmc?e=download";
}, 300);
但是这个网址来自哪里?
当它确实要求在谷歌上确认时,稍微摆弄并观看控制台,你可以看到它发出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解码它,然后使用标头重定向到该文件.
$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不是一个免费的编码服务,我也不需要保持我写过的每一个答案.祝你好运.