UIWebView的:为什么不要求使用一个不存在的主机时超时?(UIWebView: Why doe

2019-09-17 06:52发布

我的情况是这样的:

  • 我有一个UIWebView使POST请求,其中主机名是由用户提供的URL。
  • 当主机名不存在,我需要超时,这样我可以提醒用户说,他们应检查自己的设置。

怎么了:

我提出这样的要求:

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];

当主机名不存在网络上,我没有得到任何超时反应。

我已实施的所有委托方法UIWebViewDelegate ,我得到以下才能叫当我使用一个不存在的主机名:

  1. webView: shouldStartLoadWithRequest: navigationType:
    • (总是返回true进行测试)
  2. webViewDidStartLoad

这就是它 - 毕竟,没有什么。

我很惊讶, webViewDidStartLoad被调用,因为这将表明,它包含的网址,并认为它可以得到的数据从回来。 但它不能作为URL不存在!

难道我做错了什么吗?

我有一个解决办法,我要去实现,其使用NSTimer ,看是否有响应已超时期限内收到。 但是,我有取消的请求问题UIWebView -不过这是我的下一个话题SO问题!

所以我的问题:

  1. 它是正确的webViewDidStartLoad上无效的URL被称为?
  2. 我应该看到返回的请求超时错误,与我安装我的请求的方式?

提前致谢!!

拉伸:)

Answer 1:

使用委托方法

webView:didFailLoadWithError:

从它那里得到的错误。 如果错误代码是

-1000 - Bad Url
-1001 - Request timed out
-1003 - Cannot find host
-1004 - Cannot connect to host
-1005 - Network connection lost
-1006 - NSLookupFailed

通过检查这一点,你可以提醒有关错误的用户。



文章来源: UIWebView: Why does the request not time out when using a non-existant hostname?