2011年5月3日 星期二

NSURLConnection over HTTPS

這篇文章是要來教大家,怎麼和 HTTPS 的 Server 溝通。
在寫文章之前要先提醒一下大家,以下的教學目的是不論如何都要去連 HTTPS Server
正常的情況下是會先輸入帳號密碼,而且檢查 Server 的憑證是不是合法之類的
即使不用輸入帳號密碼,如果憑證有可疑,通常 Browser 也會跳出一個視窗來提醒使用者,如下
Firefox 會看到
Safari 會看到


以下的文章是在不用輸入帳號密碼而且不檢查 Server 的憑證的清況下
簡單利用 NSURLConnection 就可以了


- (void)viewDidLoad
{
    [super viewDidLoad];
    NSString * httpsAddress = @"https://allseeing-i.com";
    NSURLConnection * urlCon = [NSURLConnection connectionWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:httpsAddress]] delegate:self];
}

// 一般的 connection delegate
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
    NSLog(@"got data %@", [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]);
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
    NSLog(@"error");
}

// 無論如何回傳 YES
- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace{
    return YES;
}

// 不管那一種 challenge 都相信
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge{
    NSLog(@"received authen challenge");
    [challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
}

如果是用上面的例子 https://allseeing-i.com ,應該會在 Console 看到網頁的 HTML 源始碼。太長了就不貼上,有空的朋友可以試試不同的 https server


5 則留言:

  1. 您好:
    找不到可以留言的地方, 所以留在這裡了
    請問7/23 ~ 8/20 的資策會 Level 1 還是您教的嗎?
    我目前比較想學blocks 跟 gcd...
    請問level1 還是level2 會對這兩個單元教的比較多呢?

    回覆刪除
  2. hello, 還是我教的,Block & GCD 的基本原理會在 level 1 上。level 4 會有比較多的應用。會談到多核平行處理。

    回覆刪除
  3. 多謝回覆
    如果我已經了解基本的Block & GCD用法, 你的建議是上level1 or level4呢?
    另外我看到level4有AR, 請問AR的課程是只有在cameraView上add 一個
    overlayer的做法, 還是像使用openCV 或是https://github.com/sonsongithub/CoreAR 這種有圖形辨識的課程呢?
    抱歉打擾了, 因為資策會的網頁沒寫的那麼詳細

    回覆刪除
  4. Hi, shinren
    Level 1 是給完全初學者的哦。不過 11/27 的 Level 1 完全用最新的Xcode 4.2 也會教到 iOS 5 Objective-C 的最新的語法。還有新的storyboard。如果想上的話也可以參考看看。
    Level 4 是對 GCD 有非常詳盡的解釋,dispatch_async, dispatch_sync, dispatch_once, dispach_apply, dispatch_after. 還有什麼是 serial queue. 什麼是 concurrent queue 等等。其他的如facebook api。畫圖的 core plot 如果有需要的話也可以考慮上課。

    回覆刪除
  5. 老師你好,
    關於https您所提供的方式,
    在"非同步"的狀況下我可以成功。

    但是若是在"同步"的狀況下,
    請問我要怎麼做比較好呢?

    非常感謝您的幫忙!!

    回覆刪除