PHP实现Auth-Token获取与带UA头重定向及Video.js播放问题
解决方案:处理UA头与播放器兼容问题
你的问题核心在于两点:一是请求环节未正确携带指定User-Agent,二是直接用Location重定向无法被Video.js这类播放器正确识别处理。下面是针对性的解决步骤:
1. 正确获取auth-token(携带指定UA)
原代码里file_get_contents用的是PHP默认的User-Agent,部分站点会验证UA才返回有效token。我们需要在获取token的请求里手动指定你需要的UA:
<?php // 创建请求上下文,注入指定的User-Agent头 $requestContext = stream_context_create([ 'http' => [ 'header' => "User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0\r\n" ] ]); // 携带UA获取auth-token参数串 $authParams = file_get_contents("http://0--0.gq/Jio/Bittu_Ghosh_22.php", false, $requestContext); // 做基础的有效性校验 if(empty($authParams)) { http_response_code(500); die("Failed to fetch valid auth parameters"); }
2. 替代重定向:用反向代理返回m3u8内容
Video.js这类播放器通常期望直接拿到媒体资源的内容,而非HTTP重定向指令。我们可以让PHP充当代理,请求目标m3u8(带上auth参数和指定UA),再把响应内容和正确的头信息返回给播放器:
<?php // 创建请求上下文,注入指定的User-Agent头 $requestContext = stream_context_create([ 'http' => [ 'header' => "User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0\r\n" ] ]); // 携带UA获取auth-token参数串 $authParams = file_get_contents("http://0--0.gq/Jio/Bittu_Ghosh_22.php", false, $requestContext); if(empty($authParams)) { http_response_code(500); die("Failed to fetch valid auth parameters"); } // 拼接目标m3u8的完整URL $targetM3u8Url = "http://test.m3u8" . $authParams; // 携带UA请求目标m3u8内容 $m3u8Content = file_get_contents($targetM3u8Url, false, $requestContext); if($m3u8Content === false) { http_response_code(404); die("Failed to fetch m3u8 content"); } // 设置播放器能识别的响应头 header('Content-Type: application/vnd.apple.mpegurl'); header('Content-Length: ' . strlen($m3u8Content)); // 直接返回m3u8内容给播放器 echo $m3u8Content; ?>
为什么这样能解决问题?
- 统一UA携带:不管是获取token还是请求目标m3u8,都严格使用你指定的User-Agent,确保请求符合站点要求。
- 适配播放器逻辑:直接返回m3u8内容而非跳转指令,播放器可以直接解析播放,完美兼容Video.js这类媒体播放库。
额外优化建议
- 可以添加token缓存逻辑(如果token有有效期),避免每次请求都重复获取,提升响应速度。
- 增加更细致的错误捕获,比如网络超时、token格式异常等,返回更清晰的错误提示。
内容的提问来源于stack exchange,提问作者shubham ghosh
相关产品推荐
相关产品推荐

