我已经看到many questions在您事先知道请求需要提供凭据时询问(并回答)如何提供凭据。
当我加载请求身份验证质询的网站时(使用HTTP 401响应),我的UIWebViewDelegate
仅收到以下回调:webView:shouldStartLoadWithRequest:navigationType:
,有时webViewDidStartLoad:
({{1}如果我直接导航到该网站似乎被调用,如果我被重定向,似乎不会被调用。)
通过覆盖webViewDidStartLoad:
,-[NSObject respondsToSelector:]
会收到对UIWebViewDelegate
和uiWebView: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。请复制它。
答案 0 :(得分:6)
Apple now has sample code that solves this problem。它看起来也是如何正确实现NSURLProtocol的最完整的文档。
答案 1 :(得分:3)
您可以在自己的NSURLConnection
中加载所有请求,然后将数据作为字符串提供给webview。这将允许您在其所有荣耀中拦截连接,并仍然获得本机UIWebView
渲染。我不确定它是否能够很好地将数据流式传输到Web视图中,但希望我们不会在这里讨论过多的数据。