我遇到的问题与此问题非常相似:Can I use NSURLCredentialStorage for HTTP Basic Authentication?
该问题的作者接受了答案,但后来发布了解决方案代码返回NSURLErrorUserCancelledAuthentication
错误。我正在使用DIGEST
身份验证,但是否则我的代码执行相同的操作,并返回相同的错误。
我不想以明文形式发送用户名和密码,所以我绝对不想简单地将用户名和密码添加到URL的前面。有没有办法让NSURLConnection的sendSynchronousRequest:returningResponse:error:
方法咨询共享的NSURLCredentialStorage?这听起来像是一个类别的东西,但我对如何做到这一点并不是最微弱的想法 - 听起来我必须完全重新实现sendSynchronousRequest:returningResponse:error:
方法来获得它工作。
如何执行咨询共享NSURLCredentialStorage的同步URL连接?
答案 0 :(得分:3)
绝对可以。创建NSURLCredential,并将NSURLCredentialStorage添加为保护空间的默认。 例如:
// Permananent, session, whatever.
NSURLCredential *credential = [NSURLCredential credentialWithUser:username password:password persistence: NSURLCredentialPersistencePermanent];
// Make sure that if the server you are accessing presents a realm, you set it here.
NSURLProtectionSpace *protectionSpace = [[NSURLProtectionSpace alloc] initWithHost:@"blah.com" port:0 protocol:@"http" realm:nil authenticationMethod:NSURLAuthenticationMethodHTTPBasic];
// Store it
[[NSURLCredentialStorage sharedCredentialStorage] setDefaultCredential:credential forProtectionSpace:protectionSpace];
此时,使用与您设置的保护空间匹配的任何后续NSURLConnection将使用此凭证
答案 1 :(得分:0)
这可能无法完全回答您的问题,但是:通过NSURLConnection
进行同步提取存在许多问题(身份验证最少),如果可能的话,您应该重新构建应用以使用异步API相反,这很可能不会出现您在身份验证方面遇到的问题。