如何使用动态域名进行地域限制
我们可以使用动态域名来进行地域的访问限制,如:
-
1.限制某个地区无法使用app
-
2.限制国外无法使用app
-
3.对不同地区进行分流,如:北京使用A接口,厦门使用B接口,返回不同的数据
基本流程:通过获取用户的ip,调用外部接口或内部数据库来获取访问者的城市,通过比对其是否存在于预先配置好的城市列表中来判断用户使用哪个接口,如果存在于城市列表中,使用A接口,不存在使用B接口。
示例:通过外部接口进行的地域限制
示例中使用ip138来获取访问者ip所在地区
创建php文件,如dynamic.php,写入以下内容:
<?php
// A接口数据的接口列表,示例:["https://www.baidu.com","https://www.baidu.com","https://www.baidu.com"]
$a_api = ["https://www.baidu.com","https://www.baidu.com","https://www.baidu.com"];
// B接口数据的接口列表,示例:同A接口
$b_api = ["https://www.qq.com","https://www.qq.com","https://www.qq.com"];
// 返回A接口的城市,示例:["北京","厦门"]
$a_city = ["北京","厦门"];
// 国外是否返回A接口,示例:填yes说明返回A接口,其他内容返回B接口
$outside_a = "no";
// https://user.ip138.com/ip ip查询接口token
$token = "";
//获取真实ip
$ip = realIp();
//定义请求的信息
$opts = array(
'http' => array(
'method' => "GET",
'timeout' => 5, //单位秒
)
);
//发起请求
$req_api = "https://api.ip138.com/ip/?ip=" . $ip."&token=".$token;
$result = file_get_contents($req_api, false, stream_context_create($opts));
//解析结果
$result_json = json_decode($result, true);
if($result_json["ret"] != "ok" || sizeof($result_json["data"]) == 0){
//如果解析失败,返回A接口
echo json_encode($a_api, JSON_UNESCAPED_SLASHES);
return;
}
//如果解析成功,开始判断
//如果是国外
if($result_json["data"][0] != "中国"){
//如果设置国外返回A接口,返回A接口,否则返回B接口
echo json_encode($outside_a == "yes"?$a_api:$b_api, JSON_UNESCAPED_SLASHES);
return;
}
//如果是国内,判断当前城市,是否存在A接口的城市中
$city = $result_json["data"][2] == ""?$result_json["data"][1]:$result_json["data"][2];
echo json_encode(in_array($city,$a_city)?$a_api:$b_api, JSON_UNESCAPED_SLASHES);
return;
//获取真实ip
function realIp()
{
$ip = "Unknown";
if ($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]) {
$ip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
} elseif ($HTTP_SERVER_VARS["HTTP_CLIENT_IP"]) {
$ip = $HTTP_SERVER_VARS["HTTP_CLIENT_IP"];
} elseif ($HTTP_SERVER_VARS["REMOTE_ADDR"]) {
$ip = $HTTP_SERVER_VARS["REMOTE_ADDR"];
} elseif (getenv("HTTP_X_FORWARDED_FOR")) {
$ip = getenv("HTTP_X_FORWARDED_FOR");
} elseif (getenv("HTTP_CLIENT_IP")) {
$ip = getenv("HTTP_CLIENT_IP");
} elseif (getenv("REMOTE_ADDR")) {
$ip = getenv("REMOTE_ADDR");
}
return $ip;
}
大家可以使用该文件进行扩展,如:
-
1.将调用接口改为其他接口,需要注意某些接口的qps,比如qps为100,说明每秒只能调用100次,对于大站来说是远远不够的
-
2.将调用接口改为数据库查询,需要不断同步最新城市ip
© 版权声明
1. 本站所提供的源码模板(主题/插件)等资源仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,有部分资源为网上收集或仿制而来,若模板侵犯了您的合法权益,请来信通知我们(Email: 1311978956@qq.com),我们会及时删除,给您带来的不便,我们深表歉意!
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布投稿,分享有佣金分成!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务 请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长,可领回失去的金币,并额外有奖!
6. 如遇到加密压缩包,默认解压密码为"www.77ym.top",如遇到无法解压的请联系管理员!
7. 本站部分文章、资源来自互联网,版权归原作者及网站所有,如果侵犯了您的权利,请及时联系我站删除。免责声明
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布投稿,分享有佣金分成!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务 请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长,可领回失去的金币,并额外有奖!
6. 如遇到加密压缩包,默认解压密码为"www.77ym.top",如遇到无法解压的请联系管理员!
7. 本站部分文章、资源来自互联网,版权归原作者及网站所有,如果侵犯了您的权利,请及时联系我站删除。免责声明
THE END
暂无评论内容