这在视频和下载网站上很常见。为了防止琐碎的直接链接或热链接,它们会在用户与页面、视频播放器或验证码进行交互后为主要数据生成一个唯一的 URL。这就是您的 URL 的sig
和time
部分。此类生成的 URL 通常通过 IP 地址与用户绑定,并且会在一段时间后过期。
要传递该类型的内容,您必须破译用于生成视频 URL 的步骤。它通常像请求 HTML 页面然后在 Flash 小程序参数或脚本标记中查找 URL 一样简单。其他站点在复杂的客户端脚本或 Flash 小程序中生成 URL。
我快速浏览了 Vimeo 并弄清楚了如何获取 URL,它似乎工作正常。试试这个:
$clipId = 24195442;
ini_set('user_agent', 'Mozilla/5.0 (Windows NT 6.1; rv:10.0.9) Gecko/20100101 Firefox/10.0.9');
$config = json_decode(file_get_contents('http://player.vimeo.com/config/' . $clipId));
$videoUrl = 'http://player.vimeo.com/play_redirect?clip_id=' . $clipId .
'&sig=' . $config->request->signature .
'&time=' . $config->request->timestamp;
header('Content-Type: application/octet-stream');
readfile($videoUrl);
是的,您必须设置User-Agent字符串。当它看起来不像真正的浏览器时,Vimeo 拒绝了它。
我不知道是否有一个 Vimeo API 说它应该可以工作。请注意,它可能仅在 Vimeo 不更改其站点结构的情况下才有效。如果可能的话,最可靠的做法是保存或缓存视频文件并从您自己的服务器本地提供。