You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP替代urllib.request urlopen及视频下载异常问题求助

PHP实现需前置浏览器访问的视频下载方案

核心原因

服务器大概率会验证请求的会话Cookie、User-Agent,甚至依赖前端访问生成的临时验证参数。直接用curl请求时缺少这些验证信息,所以无法通过校验;而浏览器访问会自动处理Cookie存储、前端逻辑触发等流程,后续请求就能通过验证。

解决方案步骤

1. 模拟浏览器首次访问,获取并保存验证所需的Cookie

先用CURL发送一次模拟浏览器的请求,把服务器返回的Cookie保存到本地文件,这一步相当于模拟“在浏览器打开一次URL”的操作。

2. 携带保存的Cookie发起下载请求

用保存好的Cookie再次请求视频URL,此时就能通过服务器的验证,完成视频下载。

完整代码示例

<?php
// 替换为你的目标视频URL
$videoUrl = "https://example.com/target-video";
// 临时存储Cookie的文件路径(确保PHP有读写权限)
$cookieFile = __DIR__ . '/temp_video_cookie.txt';

// 第一步:模拟浏览器访问,获取Cookie
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $videoUrl);
// 模拟Chrome浏览器的User-Agent,避免被识别为爬虫
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36');
// 启用Cookie保存功能
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile);
// 自动跟随重定向
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
// 不输出响应内容,仅获取Cookie
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 执行请求
curl_exec($ch);
curl_close($ch);

// 第二步:携带Cookie下载视频
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $videoUrl);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36');
// 加载之前保存的Cookie
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
// 设置视频保存路径
$outputFile = __DIR__ . '/downloaded_video.mp4';
$fp = fopen($outputFile, 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
// 执行下载请求
curl_exec($ch);
// 关闭资源
fclose($fp);
curl_close($ch);

// 可选:删除临时Cookie文件
unlink($cookieFile);

echo "视频下载完成,保存路径:{$outputFile}";
?>

额外注意事项

  • 若服务器还校验Referer头,可在两步请求中添加:curl_setopt($ch, CURLOPT_REFERER, $videoUrl);
  • 部分网站会校验更多请求头(如Accept、Accept-Language),可补充完整的请求头数组:
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
    'Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
    'Connection: keep-alive',
    'Upgrade-Insecure-Requests: 1'
]);
  • 如果视频真实地址是动态生成的(需浏览器解析页面后获取),可在第一步请求后,用DOMDocument或正则表达式解析响应内容,提取真实视频URL再进行下载。

内容的提问来源于stack exchange,提问作者Ziscom 18

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 10:46:05