AFNetworking域的可达性管理器 - 尽管是强制门户网站,但始终可以访问

时间:2014-05-22 00:16:17

标签: ios afnetworking afnetworking-2 reachability captivenetwork

我正在使用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,它会重定向到强制门户网站的标志 - 在页面)。

我做错了吗?如果没有,有什么方法吗?

谢谢!

1 个答案:

答案 0 :(得分:4)

不幸的是,可达性仅检查特定主机或DNS名称是否响应。正如您从浏览器中看到的那样,强制门户通过响应所有请求来工作,无论用户尝试访问哪个站点,都可以显示登录页面。因此,可达性表示域可以访问,因为它得到了响应。它无法区分“真实”响应和强制门户之间的区别。

您需要让代码尝试在“可访问”时从您的网站检索已知信息 - 例如“http://example.com/signature.txt”,其中signature.txt包含您可以检查的文本。如果您获得了适当的值,那么您就知道自己正在与您的网站进行交谈。如果没有那么它可能是一个强制门户