<?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: ua也需与请求ua一致",
]
]);
// 执行第一次 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=频道号 此脚本要求香港 ip 最好能解锁 now tv 的 免费频道有 330 331 332 333 366 367 540 541 542 543 545 548 630 099 096 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);
?>