我正在使用AFNetworking的可访问性管理器来监控特定域的可访问性,如下所示:
reachabilityManager = [AFNetworkReachabilityManager managerForDomain:@"www.xyz.com"];
[reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusReachableViaWWAN:
case AFNetworkReachabilityStatusReachableViaWiFi:
DLog(@"***became reachable***");
break;
case AFNetworkReachabilityStatusNotReachable:
default:
DLog(@"***became UNreachable***");
break;
}
}];
[reachabilityManager startMonitoring];
除非设备连接到强制门户/网络并禁用所有其他数据,否则它的效果很好。由于某种原因,管理员认为该设备处于可达状态,尽管该域事实上是无法访问的(如果要在浏览器中输入相应的URL,它会重定向到强制门户网站的标志 - 在页面)。
我做错了吗?如果没有,有什么方法吗?
谢谢!
答案 0 :(得分:4)
不幸的是,可达性仅检查特定主机或DNS名称是否响应。正如您从浏览器中看到的那样,强制门户通过响应所有请求来工作,无论用户尝试访问哪个站点,都可以显示登录页面。因此,可达性表示域可以访问,因为它得到了响应。它无法区分“真实”响应和强制门户之间的区别。
您需要让代码尝试在“可访问”时从您的网站检索已知信息 - 例如“http://example.com/signature.txt”,其中signature.txt包含您可以检查的文本。如果您获得了适当的值,那么您就知道自己正在与您的网站进行交谈。如果没有那么它可能是一个强制门户