2013-03-13 98 views
0

我使用[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)]從Web服務中提取數據,但在Web服務器的SSL證書錯誤具有自頒發的證書,造成這種錯誤的出現:顯示忽略與NSURLConnection的

SSL Error

錯誤使用:

NSAlert *a = [NSAlert alertWithError:error]; 
[a runModal]; 

有什麼辦法可以忽略這個錯誤並繼續嗎?

+1

[忽略證書錯誤與NSURLConnection的]的可能重複(http://stackoverflow.com/questions/3766755/ignoring-certificate-errors -with-nsurlconnection) – paulmelnikow 2013-03-13 23:59:55

+0

我覺得這個問題之前已經被問到過了,並且重新命名了前面的問題。希望它能解決你的問題。 – paulmelnikow 2013-03-14 00:00:50

+0

你是對的這是一個騙局(雖然我沒有得到答案,因爲我搜索了'sendAsynchronousRequest',所以這個問題是專門針對該方法的)。 – colincameron 2013-03-14 15:13:24

回答

5

繼在鏈接的問題的說明,我定義爲NSURLConnection的虛擬接口:

@interface NSURLRequest (DummyInterface) 
+ (void)setAllowsAnyHTTPSCertificate:(BOOL)allow forHost:(NSString*)host; 
@end 

和創建請求之前調用的方法:

[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[url host]]; 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; 

這抑制錯誤有關證書無效。

+3

這不是私人API嗎? – Stavash 2013-07-24 11:38:26

+0

是的,但我的應用不在應用商店中,而是直接分發,所以我不需要擔心拒絕。當然,我將在OS X的更高版本中改變API的風險,因爲這是沒有記錄的。 – colincameron 2013-07-24 16:54:06

+0

很酷,只是想確保 – Stavash 2013-07-24 20:58:52

0

這可能會被Apple拒絕。使用正確的執行NSConnectiondatadelegate的:

看到變通的辦法: Stackoverflow response to similar question

+0

我無法使用'NSURLConnectionDelegate'方法,因爲我正在調用'-sendAsynchronousRequest'。儘管如此,對於我的應用程序來說,這是一個有爭議的問題,因爲我通過購買服務器的SSL證書來解決問題。 – colincameron 2014-06-26 15:47:23