PHP没有启用HTTPS支持见无发播放,改为cURL来替代,并添加更好的错误处理和数据验证<?php
$id = $_GET['id'];
//$id = '208823316033';
$apiUrl = 'https://live.douyin.com/webcast/room/web/enter/?aid=6383&device_platform=web&browser_language=zh-CN&browser_platform=iPad&browser_name=Safari&browser_version=17.6&web_rid=' . $id;
// 使用cURL替代file_get_contents,更稳定
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (iPad; CPU OS 17_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.6 Mobile/15E148 Safari/604.1');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Cookie: ttwid=1%7CYqdH7G5MetcLz-SYn5w09SR81BSavm6lW81orliZUbA%7C1719753328%7Ccb83acfa23ce88b920c26fef1746820e6a701528adfe7c48847cfb5925eb1a0f',
'Accept: application/json, text/plain, */*',
'Accept-Language: zh-CN,zh;q=0.9',
'Referer: https://live.douyin.com/'
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
curl_close($ch);
// 错误处理
if ($response === false || !empty($error)) {
http_response_code(500);
echo "cURL Error: " . $error;
exit;
}
if ($httpCode !== 200) {
http_response_code($httpCode);
echo "HTTP Error: " . $httpCode;
exit;
}
$json = json_decode($response, true);
// 检查JSON解析是否成功
if ($json === null) {
http_response_code(500);
echo "JSON Parse Error: Invalid response format";
exit;
}
// 检查响应数据结构
if (!isset($json['data']['data'][0]['stream_url']['live_core_sdk_data']['pull_data']['stream_data'])) {
http_response_code(404);
echo "Error: Live stream not found or room is offline";
exit;
}
$stream_data_json = $json['data']['data'][0]['stream_url']['live_core_sdk_data']['pull_data']['stream_data'];
$stream_data = json_decode($stream_data_json, true);
// 检查stream_data解析是否成功
if ($stream_data === null) {
http_response_code(500);
echo "Error: Failed to parse stream data";
exit;
}
// 检查HLS URL是否存在
if (!isset($stream_data['data']['origin']['main']['hls'])) {
http_response_code(404);
echo "Error: HLS stream URL not found";
exit;
}
$hls_url = $stream_data['data']['origin']['main']['hls'];
//$flv_url = $stream_data['data']['origin']['main']['flv'];
// 验证URL格式
if (empty($hls_url) || !filter_var($hls_url, FILTER_VALIDATE_URL)) {
http_response_code(500);
echo "Error: Invalid stream URL";
exit;
}
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type");
header('Location: ' . $hls_url);
|