AFNetworking reachability manager for domain - всегда доступен, несмотря на невольный портал
Я использую менеджер достижимости 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-адрес в браузере, он перенаправляет на вход в captive portal страница).
Я делаю что-то не так? Если нет, то есть ли какой-нибудь способ обойти это?
Спасибо!
1 ответ:
К сожалению, достижимость просто проверяет, отвечает ли конкретный хост или dns-имя. Как вы видели из браузера, невольные порталы работают, отвечая на все запросы, чтобы отобразить страницу входа независимо от того, к какому сайту пользователь пытается получить доступ. Таким образом, достижимость говорит, что домен достижим, потому что он получил ответ. Он не может сказать разницу между" реальным " ответом и захваченным порталом.
Вам нужно будет сделать вашу попытку кода, чтобы получить известная часть информации с вашего сайта, когда она "доступна" - что-то вроде "http://example.com/signature.txt " где подпись.txt содержит текст, который вы можете проверить. Если вы получаете соответствующее значение обратно, то вы знаете, что действительно разговариваете с вашим сайтом. Если нет, то это, вероятно, плененный портал