2011-12-17 79 views
0

我想克服iOS 5中有关NSURLConnection的更改。iOS 5 - 连接到HTTPS服务器

基本方法改变了,所以如果你需要连接到使用HTTPS,并发送证书来验证一个网站,你不能这样做了,因为许多方法被弃用。

有没有在那里我能得到我应该怎么写使用iOS5的兼容代码的代码工作示例的任何地方吗?我已经检查了文档和头文件,但是没有一个单独的源代码向我展示了如何使用一个示例进行这种连接,该示例显示了代码在哪个文件中的位置(假设我只是从Xcode中的标准模板开始,单个视图模板或标签栏模板)。

我真的很感激任何建议;由于我的应用程序将在iOS 5上运行,因此我想使用新程序,但缺少文档和教程使我的任务比我想象的更难。

回答

1

您应该使用NSURLCredentialStorage单。你需要通过调用NSURLCredentialStorage方法之一使用NSURLConnection的前添加凭据存储,例如:

- (void)setCredential:(NSURLCredential *)credential forProtectionSpace:(NSURLProtectionSpace *)protectionSpace 
+0

谢谢Joris,所以这些是我应该遵循的步骤? 1:授人以NSURLConnectionDelegate添加到我的ViewController 2:添加凭据NSURLCredentialStorage 3:凭据传递在你的片段? – user1006198

+0

不,我展示的方法是将它们添加到CredentialStorage。一旦他们在那里只使用你的NSURLConnection而不用担心凭证。如果他们在NSCredentialStorage中,他们将被自动使用。 –

+0

谢谢澄清Joris;从来没有使用NSURLCredential :) – user1006198

1

我用这个:

- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge: 
     (NSURLAuthenticationChallenge *)challenge { 

if ([challenge previousFailureCount] <= maxRetryCount) { 
    NSURLCredential *newCredential = 
    [NSURLCredential 
    credentialWithUser: userName 
    password:password 
    persistence:NSURLCredentialPersistenceForSession]; 

    [[challenge sender] 
    useCredential:newCredential 
    forAuthenticationChallenge:challenge]; 

    } 
    else 
    { 
    NSLog(@"Failure count %d",[challenge previousFailureCount]); 
    } 
} 

这工作对我很好。但是,它看起来像自签名证书也被接受。我可能需要发布一个关于该问题的单独问题。

+0

感谢您的回复Jan;确实有效,但它会接受任何自签名的证书;我将不得不使用Joris提到的解决方案。 – user1006198

+0

嗨user1006198,我找到了一个解决方案,可以使用这种方法。请参阅http://stackoverflow.com/questions/8564812/preventing-self-signed-ssl-certificates-in-ios5;我需要一个挑战方法(而不是Joris的单例方法,因为如果会话失效,我不想存储用户凭证的时间超过会话持续时间,我需要重新显示登录框。 – Jan