<?php
// 从 URL 查询字符串获取频道号
$channelNo = isset($_GET['ch']) ? $_GET['ch'] : '332'; // 如果没有提供,则默认使用 332
// 初始化 cURL 执行第一次请求
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://nowplayer.now.com/liveplayer/play/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "channelNo=" . $channelNo, // 使用动态的频道号
CURLOPT_HTTPHEADER => [
"Cookie: NOW_SESSION=这里填你的cookie",
"Referer: https://nowplayer.now.com/liveplayer/" . $channelNo, // 动态的 referer
"User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0",
]
]);
// 执行第一次 cURL 请求并获取响应
$response = curl_exec($curl);
// 获取 HTTP 状态码
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
// 关闭 cURL
curl_close($curl);
// 检查 cURL 请求是否成功
if ($response === false) {
echo "无法从服务器获取响应。";
exit;
}
// 检查 HTTP 响应状态码
if ($httpCode !== 200) {
echo "错误:无法获取视频流,HTTP 状态码:" . $httpCode;
exit;
}
// 解析 JSON 响应
$data = json_decode($response, true);
// 检查 'asset' 字段是否存在并提取 URL
if (isset($data['asset'][0])) {
$assetUrl = $data['asset'][0]; // 这是第二次请求的目标链接
// 执行第三次请求(通过第二次请求的 assetUrl)
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $assetUrl, // 使用第二次请求的链接
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0"
]
]);
// 执行第三次请求并获取响应
$thirdResponse = curl_exec($curl);
// 获取第三次请求的 HTTP 状态码
$thirdHttpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
// 获取第三次请求的最终 URL(即重定向后的链接)
$finalUrl = curl_getinfo($curl, CURLINFO_EFFECTIVE_URL);
// 关闭 cURL
curl_close($curl);
// 检查第三次请求是否成功
if ($thirdResponse === false) {
echo "无法从第三次请求获取响应。";
exit;
}
// 检查 HTTP 响应状态码
if ($thirdHttpCode !== 200) {
echo "错误:第三次请求失败,HTTP 状态码:" . $thirdHttpCode;
exit;
}
// 重定向到第三次请求的最终 URL
header("Location: " . $finalUrl);
exit; // 结束脚本执行,确保重定向生效
} else {
echo "响应中未找到 Asset URL。";
}
?>
http://ip/now.php?ch=频道号 可以使用这个https://now.473.hk/ 工具来测试 cookie 可用性。此脚本要求香港 ip 最好能解锁 now tv 的 目前就是 key 问题没有解决 变得速度快 如果大佬会的话可以帮忙改进 免费频道有 330 331 332 333 366 367 540 541 542 543 545 548 630 099 561 321 328 552 325 553 329 付费频道应该可以 没试过 cookie 可用 https://www.editthiscookie.com/ 插件抓
96 用以下脚本 无需 cookie
<?php
// 生成随机的 UUID 或 16 进制的随机字符串
function generateRandomString($length = 16) {
return bin2hex(random_bytes($length / 2)); // 生成指定长度的 16 进制字符串
}
// 生成随机的 cookie 和 deviceId
$randomString = generateRandomString(); // 生成随机的字符串
$cookie = $randomString;
$deviceId = $randomString;
// 发送 POST 请求的 URL
$url = 'https://api.viu.now.com/p8/3/getLiveURL';
// 要发送的 POST 数据(JSON 格式)
$data = array(
"callerReferenceNo" => "20241111101911",
"channelno" => "096",
"contentId" => "096",
"contentType" => "Channel",
"mode" => "prod",
"PIN" => "password",
"cookie" => $cookie, // 使用生成的随机 cookie
"deviceId" => $deviceId, // 使用生成的随机 deviceId
"deviceType" => "ANDRIOD_WEB",
"format" => "HLS"
);
// 将数据数组转换为 JSON 字符串
$json_data = json_encode($data);
// 初始化 cURL 会话
$ch = curl_init($url);
// 设置 cURL 选项
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 返回响应作为字符串
curl_setopt($ch, CURLOPT_POST, true); // 设置请求类型为 POST
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data); // 设置 POST 数据(JSON 格式)
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Accept: */*',
'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'Cache-Control: no-cache',
'Content-Type: text/plain',
'Origin: https://viu.tv',
'Pragma: no-cache',
'Priority: u=1, i',
'Referer: https://viu.tv/',
'Sec-CH-UA: "Chromium";v="130", "Microsoft Edge";v="130", "Not?A_Brand";v="99"',
'Sec-CH-UA-Mobile: ?0',
'Sec-CH-UA-Platform: "macOS"',
'Sec-Fetch-Dest: empty',
'Sec-Fetch-Mode: cors',
'Sec-Fetch-Site: cross-site',
'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0'
));
// 执行 cURL 请求并存储响应
$response = curl_exec($ch);
// 检查是否有 cURL 错误
if(curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
} else {
// 解析 JSON 响应
$data = json_decode($response, true);
// 获取视频流的 manifest URL
$manifest_url = $data['asset'][0];
// 第二次请求:访问视频流的 manifest URL
$ch2 = curl_init($manifest_url);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true); // 返回响应
curl_setopt($ch2, CURLOPT_FOLLOWLOCATION, true); // 跟随重定向
curl_setopt($ch2, CURLOPT_HTTPHEADER, array(
'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0'
));
// 执行第二次请求
$response2 = curl_exec($ch2);
// 获取第二次请求后的 URL
$second_url = curl_getinfo($ch2, CURLINFO_EFFECTIVE_URL);
// 第二次请求是否还有更多重定向
$ch3 = curl_init($second_url);
curl_setopt($ch3, CURLOPT_RETURNTRANSFER, true); // 返回响应
curl_setopt($ch3, CURLOPT_FOLLOWLOCATION, true); // 跟随重定向
curl_setopt($ch3, CURLOPT_HTTPHEADER, array(
'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0'
));
// 执行第三次请求并获取最终 URL
curl_exec($ch3);
$final_url = curl_getinfo($ch3, CURLINFO_EFFECTIVE_URL);
// 关闭第三次请求的 cURL 会话
curl_close($ch3);
// 重定向到最终 URL
header("Location: $final_url");
exit();
}
// 关闭第一次请求的 cURL 会话
curl_close($ch);
?>