存在登录页面时,iOS swift 可访问性应该失败
Posted
技术标签:
【中文标题】存在登录页面时,iOS swift 可访问性应该失败【英文标题】:iOS swift reachability should fail while login page exists 【发布时间】:2015-07-14 08:07:09 【问题描述】:我正在将我的 iPad 连接到需要用户使用网页登录的 Wi-Fi 热点。如果我没有在该页面登录,则互联网连接被阻止。但是,下面的可达性方法总是返回true
,即httpResponse.statusCode == 200
。 Swift 代码如下。
public class Reachability
class func isConnectedToNetwork()->Bool
var Status:Bool = false
let url = NSURL(string: "http://www.google.com/")
let request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "HEAD"
request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData
request.timeoutInterval = 10.0
var response: NSURLResponse?
var data = NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: nil) as NSData?
if let httpResponse = response as? NSHTTPURLResponse
if httpResponse.statusCode == 200
Status = true
return Status
我想要的是:
Wi-Fi 登录网页存在 => 返回错误状态 Wi-Fi 登录网页消失 => 返回真实状态我尝试了一些可达性代码,结果是一样的。是否有可能在实际 Internet 连接仍被 Wi-Fi 登录控件阻止时获得虚假连接状态?
【问题讨论】:
【参考方案1】:你想要什么和你得到什么是完全不同的两件事。生活是艰难的。每当您使用 http 时,都希望得到与您所要求的无关的回复。每当您使用 https 时,都会收到带有与您请求的站点不匹配的证书的回复。
是的,当您得到一个登录页面时,系统会告诉您存在与 Internet 的 WiFi 连接。如果您有幸拥有 BT Homehub 路由器,例如,当您的 Internet 连接断开时,路由器将返回一个网站,试图告诉您 Internet 连接已断开,并带有有效的 200 状态。
结论:准备好处理您从服务器获得的任何内容,而不会崩溃,也不会做愚蠢的事情。
【讨论】:
【参考方案2】: if let httpResponse = response as? NSHTTPURLResponse
if httpResponse.statusCode == 200
Status = true
else
Status = false
【讨论】:
以上是关于存在登录页面时,iOS swift 可访问性应该失败的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 中为 UIRefreshControl 添加可访问性
在 iOS9 和 Swift2 中使用 Parse 登录 Facebook