我有一个用例,其中UIWebView
可能需要与使用NTLM保护的Web服务器连接。我还有一个用例,我已经有了要传递的凭据。因此,如何强制用户输入它们,如何使用UIWebView
?
更新
使用此方法here在执行简单的GET请求时效果很好,但在执行POST时完全失败,因为它在发布后正在执行GET。
ASIHttpRequest和ASIWebPageRequest也存在同样的问题。 GET请求工作奇迹,但任何POST都不起作用。如果只有世界只处理GET请求。
我已经能够在HTTP请求字符串中使用包含用户名和密码的this method,但这非常不安全以至于无法使用它。使用嗅探器,我能够看到三次握手在GET和POST请求中都没有任何问题。
答案 0 :(得分:2)
您可以设置默认凭据:
NSURLProtectionSpace *protectionSpace = [[NSURLProtectionSpace alloc]
initWithHost: _host
port: 80
protocol: @"http"
realm: _host
authenticationMethod:NSURLAuthenticationMethodNTLM];
[[NSURLCredentialStorage sharedCredentialStorage] setDefaultCredential:[NSURLCredential credentialWithUser:_username password:_password persistence:NSURLCredentialPersistenceForSession] forProtectionSpace:protectionSpace];
现在您可以让您的网络视图执行请求,当它遇到您的protenctionSpace时,它会使用给定的凭据登录
答案 1 :(得分:1)
从iOS 3.2和4.1开始,没有用于拦截NTLM质询的 public 委托。但是,有一个私有API可以覆盖,以便为此提供适当的支持。由于这会使您的应用程序面临被拒绝的危险,我将放弃发布代码,因为它目前对App Store开发没有任何价值。
答案 2 :(得分:0)
如果您愿意尝试一些实验性代码,可以使用ASIWebPageRequest。
有点hacky,因为您必须使用ASIWebPageRequest下载页面内容,将其加载到UIWebView中,然后捕获Web视图中的任何链接点击并再次重复该过程(如果URL中的内容)要求认证)。另外,我认为你必须管理自己的历史堆栈。
我认为这不容易,但看起来确实可行,只要ASIWebPageRequest代码没有太多错误或有限,它似乎应该可以工作。
答案 3 :(得分:-1)
UIWebView 根本不支持身份验证。在iPhone OS 3.1中,您可以向中央凭证存储添加凭据, UIWebView 至少可以使用基本身份验证。但是从iOS 4.0开始,我没有看到任何使用身份验证的方法(基于cookie或基于URL的表单身份验证除外)。