You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
BiliRoaming-PHP-Server/index.php

109 lines
3.0 KiB
PHTML

4 years ago
<?php
// 防止外部破解
define('SYSTEM', TRUE);
define('VERSION', '2.9.12');
// 加上json的Header
header('Content-Type: application/json; charset=utf-8');
// 加载配置
include ("config.php");
4 years ago
// 缓存用
if (SAVE_CACHE == 1) {
include ("log.php");
4 years ago
}
// 判断要转发的host
$path = explode('/index.php', $_SERVER['PHP_SELF'])[0];
// Web接口
if (WEB_ON == 1 && $path == "/") {
$host = CUSTOM_HOST_DEFAULT;
$path = "/pgc/player/web/playurl";
header("Access-Control-Allow-Origin: https://www.bilibili.com");
header("Access-Control-Allow-Credentials: true");
}
if ($path == "/intl/gateway/v2/ogv/playurl") {
$host = CUSTOM_HOST_TH;
} elseif ($path == "/intl/gateway/v2/app/search/type" || $path == "/intl/gateway/v2/app/subtitle") {
$host = CUSTOM_HOST_SUB;
} elseif ($path == "/pgc/player/api/playurl" || $path == "/pgc/player/web/playurl") {
if (AREA=="cn") {
$host = CUSTOM_HOST_CN;
} else if (AREA=="hk") {
$host = CUSTOM_HOST_HK;
} else if (AREA=="tw") {
$host = CUSTOM_HOST_TW;
} else {
// Web接口
$host = CUSTOM_HOST_DEFAULT;
header("Access-Control-Allow-Origin: https://www.bilibili.com");
header("Access-Control-Allow-Credentials: true");
}
} else {
// 欢迎语
exit(WELCOME);
}
// 判断服务器锁区 及 web接口
if ($path == "/intl/gateway/v2/ogv/playurl" || $path == "/pgc/player/api/playurl") {
if (LOCK_AREA == "1" && !empty($SERVER_AREA) && !in_array(AREA, $SERVER_AREA)) {
exit(BLOCK_RETURN);
}
}elseif ($path == "/pgc/player/web/playurl") {
if(WEB_ON == 0) {
exit(BLOCK_RETURN);
}
header("Access-Control-Allow-Origin: https://www.bilibili.com");
header("Access-Control-Allow-Credentials: true");
4 years ago
}
// 模块请求都会带上X-From-Biliroaming的请求头为了防止被盗用可以加上请求头判断WEB接口暂不限制
if (BILIROAMING_VERSION == "" && BILIROAMING == 1 && $path != "/pgc/player/web/playurl") {
exit(BLOCK_RETURN);
}
4 years ago
// 判断 playurl
$playurl = 0;
if ($path != "/intl/gateway/v2/app/search/type" && $path != "/intl/gateway/v2/app/subtitle") {
$playurl = 1;
4 years ago
}
// 鉴权
if ($playurl == 1) {
include ("auth.php");
4 years ago
}
4 years ago
// 获取缓存
if (SAVE_CACHE == 1 && $playurl == 1) {
include ("cache.php");
$cache = get_cache();
if ($cache != "") {
exit($cache);
}
4 years ago
}
// 指定ip回源
if (IP_RESOLVE == 1) {
$host = $hosts[array_rand($hosts)];
$ip = $ips[array_rand($ips)];
}
4 years ago
// 转发到指定服务器
$url = $host.$path."?".$_SERVER['QUERY_STRING'];
if (IP_RESOLVE == 1) {
$output = get_webpage($url,$host,$ip);
}else {
$output = get_webpage($url);
}
print($output);
// 写入缓存
if (SAVE_CACHE == 1 && $playurl == 1) {
write_cache();
}
function get_webpage($url,$host="",$ip="") {
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
if (IP_RESOLVE == 1) { // 指定ip回源
curl_setopt($ch,CURLOPT_RESOLVE,[$host.":443:".$ip]);
}
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_HTTPHEADER, array(
'User-Agent: '.@$_SERVER["HTTP_USER_AGENT"]
));
$output = curl_exec($ch);
curl_close($ch);
return $output;
4 years ago
}
?>