我已经看到
many
questions在您事先知道请求需要它们时询问(并回答)如何提供凭据.
当我加载请求身份验证质询的站点时(使用HTTP 401响应),我的UIWebViewDelegate只接收以下回调:webView:shouldStartLoadWithRequest:navigationType:有时webViewDidStartLoad :(如果我直接导航到站点,似乎会调用webViewDidStartLoad:,如果我被重定向,似乎没有被调用.
通过重写 – [NSObject respondsToSelector:],UIWebViewDelegate接收一些对uiWebView的调用:resource:canAuthenticateAgainstProtectionSpace:forDataSource:和uiWebView:resource:didReceiveAuthenticationChallenge:fromDataSource :,这可能很有用,但当然那些是私有API,可能会得到我的app拒绝了.
我用嵌入式UIWebViews测试了一些不同的主流应用程序.到目前为止,只有Chrome正确处理这些身份验证挑战.我甚至设置了自己的服务器并验证了Chrome只有一次POST. Twitter和Tweetbot失败只是永远显示加载屏幕,就像我的.
除了使用第二个推测的NSURLConnection之外,还有另一种(可能非常hacky)方法来检测这些身份验证挑战吗?如果我发出一个POST请求,那将会对所有内容进行双重POST,这很糟糕.
I’ve added a radar to request an enhancement to UIWebView for this.请复制它.
解决方法
Apple now has sample code that solves this problem.它看起来也是如何正确实现NSURLProtocol的最完整的文档.