一,首先,这里下载的是b站的短视频,不是电影资源。
二,找到一个视频,如:https://www.bilibili.com/video/BV1fx411N7bU?from=search&seid=2553239732594236353
三,右键查看网站源代码
四,发现JSON数据:
分析后发现
有一个video和audio字段,一个代表视频,一个代表音频。里面都有baseUrl,就是对应下载链接
五,代码
//视频
//$url = trim("https://xy223x112x33x38xy.mcdn.bilivideo.cn:4483/upgcxcode/08/58/358155808/358155808-1-30080.m4s");
//音频
$url = trim("https://xy223x112x33x7xy.mcdn.bilivideo.cn:4483/upgcxcode/08/58/358155808/358155808-1-30280.m4s?");
$hdrs = array(
'http' =>array('header' =>
"Content-Type: application/octet-stream\r\n" .
"Referer: https://www.bilibili.com/video/BV1fx411N7bU?from=search&seid=599443804786898753\r\n" .
"User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3775.400 QQBrowser/10.6.4208.400"
),
);
$context = stream_context_create($hdrs);
$handle = fopen($url, "rb",false,$context);
$fp = fopen('yp.mp4', 'w');//打开一个文件,
while (!feof($handle)) { //循环读取远程文件
$contents = '';
$contents = fread($handle, 1048576);//每次读取1M
fwrite($fp, $contents);//将远程文件内容写入打开的vv.mp4文件
}
fclose($handle);
fclose($fp);
下载下来的文件可能迅雷打不开,可以直接用浏览器打开。
六,对于免费视频的下载测试
有的免费视频播放时会定时请求:https://h5seeds-open.xycdn.com/api/get_seeds
这个接口,这个接口会返回
返回node_type为1的是视频资源,返回是4的为音频资源,找出来后用上面的代码也可下载request_url。但有的免费视频并不会请求这个接口,待研究