UIWebView:为什么请求在使用不存在的主机名时不超时?
我的情况是这样的:
- 我有一个
UIWebView
,它向主机名由用户提供的URL发出POST请求。 - 当主机名不存在时,我需要超时,以便我可以提醒用户说他们应该检查他们的设置。
发生什么事:
我提出这样的要求:
NSString *theURL = [NSString stringWithFormat:@"https://%@%@", _hostname, LOGIN_PART_URL]; NSString *body = [NSString stringWithFormat:@"Username=%@&Password=%@", _username, _password]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:[NSURL URLWithString:theURL] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:_timeoutInSecs]; [request setHTTPMethod: @"POST"]; [request setHTTPBody: [body dataUsingEncoding: NSUTF8StringEncoding]]; [web loadRequest:request];
当networking上不存在主机名时,我不会收到任何超时响应。
我已经实现了UIWebViewDelegate
所有委托方法,并且当我使用一个不存在的主机名时,我得到以下调用:
-
webView: shouldStartLoadWithRequest: navigationType:
- (为了testing,总是返回true)
-
webViewDidStartLoad
就是这样 – 之后没有任何东西。
我很惊讶, webViewDidStartLoad
被调用,因为这表明它find了URL,并认为它可以从中获取数据。 但它不能作为URL不存在!
我在这里做错了什么?
我有一个解决方法,我要实现,它使用NSTimer
来查看是否在超时时间内收到响应。 不过,我在取消UIWebView
的请求方面遇到了问题 – 但这是我的下一个SO问题的主题!
所以我的问题:
- 在无效的URL上调用
webViewDidStartLoad
是否正确? - 我应该看到一个请求超时错误返回的方式,我已经设置我的请求?
提前致谢!!
拉伸:)
使用委托方法
webView:didFailLoadWithError:
从中获取错误。 如果错误代码是
-1000 - Bad Url -1001 - Request timed out -1003 - Cannot find host -1004 - Cannot connect to host -1005 - Network connection lost -1006 - NSLookupFailed
通过检查这可以提醒用户有关错误。