如何从UIWebView检测身份验证质询?

时间:2013-04-26 14:58:38

标签: ios uiwebview http-authentication uiwebviewdelegate

我已经看到many questions在您事先知道请求需要提供凭据时询问(并回答)如何提供凭据。

当我加载请求身份验证质询的网站时(使用HTTP 401响应),我的UIWebViewDelegate仅收到以下回调:webView:shouldStartLoadWithRequest:navigationType:,有时webViewDidStartLoad:({{1}如果我直接导​​航到该网站似乎被调用,如果我被重定向,似乎不会被调用。)

通过覆盖webViewDidStartLoad:-[NSObject respondsToSelector:]会收到对UIWebViewDelegateuiWebView:resource:canAuthenticateAgainstProtectionSpace:forDataSource:的一些调用,这可能很有用,但当然这些是私有API,可能会得到我的app拒绝。

我测试了一些嵌入式uiWebView:resource:didReceiveAuthenticationChallenge:fromDataSource:的主流应用。到目前为止,只有Chrome正确处理这些身份验证挑战。我甚至设置了自己的服务器并仅验证了Chrome只UIWebView次。 Twitter和Tweetbot失败只是永远显示加载屏幕,就像我的。

除了使用第二个推测POST之外,还有另一种(可能是非常hacky)方式来检测这些身份验证挑战吗?如果我发出NSURLConnection请求,则会加倍 - POST所有内容,这是不好的。

I've added a radar to request an enhancement to UIWebView for this。请复制它。

2 个答案:

答案 0 :(得分:6)

Apple now has sample code that solves this problem。它看起来也是如何正确实现NSURLProtocol的最完整的文档。

答案 1 :(得分:3)

您可以在自己的NSURLConnection中加载所有请求,然后将数据作为字符串提供给webview。这将允许您在其所有荣耀中拦截连接,并仍然获得本机UIWebView渲染。我不确定它是否能够很好地将数据流式传输到Web视图中,但希望我们不会在这里讨论过多的数据。