[iOS]網(wǎng)絡(luò)請(qǐng)求中的證書驗(yàn)證-NSURLConnection

記錄一下在網(wǎng)絡(luò)請(qǐng)求中證書驗(yàn)證的基于NSURLConnection的實(shí)現(xiàn)

一.開始一個(gè)請(qǐng)求

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    //保存數(shù)據(jù)
    self.data = [NSMutableData data];
    
    NSMutableURLRequest * request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"https://XXXXXXXXXXXX"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:240];
    [request setHTTPMethod:@"POST"];
    [request setHTTPShouldHandleCookies:YES];
    NSStringEncoding gbkEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
    NSData *postData = [@"XX=XX&XX=XX" dataUsingEncoding:gbkEncoding];
    [request setHTTPBody:postData];

    self.connection = [NSURLConnection connectionWithRequest:request delegate:self];
}

二.實(shí)現(xiàn)NSURLConnection驗(yàn)證的回調(diào)方法

- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
    
    if (challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust) {
        SecTrustRef trust = challenge.protectionSpace.serverTrust;
        SecTrustResultType result;
        
        //獲取本地證書
        NSData *data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"XXX" ofType:@"cer"]];
        SecCertificateRef certificate = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)(data));
        
        SecTrustSetAnchorCertificates(trust, (__bridge CFArrayRef)@[CFBridgingRelease(certificate)]);
        OSStatus status = SecTrustEvaluate(trust, &result);
        
        
        if (status == errSecSuccess &&
            (result == kSecTrustResultProceed ||
             result == kSecTrustResultUnspecified)) {
                
                //驗(yàn)證成功凤薛,生成NSURLCredential憑證cred浊猾,告知challenge的sender使用這個(gè)憑證來(lái)繼續(xù)連接
                NSURLCredential *cred = [NSURLCredential credentialForTrust:trust];
                [challenge.sender useCredential:cred forAuthenticationChallenge:challenge];
                
            } else {
                
                //驗(yàn)證失敗,取消這次驗(yàn)證流程
                [challenge.sender cancelAuthenticationChallenge:challenge];
                
            }
    }
}

三.接收數(shù)據(jù)

- (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [self.data appendData:data];
}

四.處理數(shù)據(jù)

- (void) connectionDidFinishLoading:(NSURLConnection *)connection {
    NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
    NSString *retStr = [[NSString alloc] initWithData:self.data encoding:enc];
    NSLog(@"retString:%@",retStr);
    NSData* newData=[retStr dataUsingEncoding:NSUTF8StringEncoding];
    NSError *error = nil;
    id responseObject = [NSJSONSerialization JSONObjectWithData:newData options:NSJSONReadingMutableLeaves error:&error];
    if (error) {
        NSLog(@"error:%@",error);
    }
    if (responseObject) {
        NSLog(@"%@", responseObject);
    }else{
        
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末解藻,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子进倍,更是在濱河造成了極大的恐慌土至,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猾昆,死亡現(xiàn)場(chǎng)離奇詭異陶因,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)垂蜗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門楷扬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人贴见,你說(shuō)我怎么就攤上這事烘苹。” “怎么了片部?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵螟加,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我吞琐,道長(zhǎng),這世上最難降的妖魔是什么然爆? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任站粟,我火速辦了婚禮,結(jié)果婚禮上曾雕,老公的妹妹穿的比我還像新娘奴烙。我一直安慰自己,他們只是感情好剖张,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布切诀。 她就那樣靜靜地躺著,像睡著了一般搔弄。 火紅的嫁衣襯著肌膚如雪幅虑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天顾犹,我揣著相機(jī)與錄音倒庵,去河邊找鬼。 笑死炫刷,一個(gè)胖子當(dāng)著我的面吹牛擎宝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播浑玛,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼绍申,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起极阅,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤胃碾,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后涂屁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體书在,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年拆又,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了儒旬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡帖族,死狀恐怖栈源,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情竖般,我是刑警寧澤甚垦,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站涣雕,受9級(jí)特大地震影響艰亮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜挣郭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一迄埃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧兑障,春花似錦侄非、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至福澡,卻和暖如春叠赦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背革砸。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工眯搭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人业岁。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓鳞仙,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親笔时。 傳聞我的和親對(duì)象是個(gè)殘疾皇子棍好,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • AFHTTPRequestOperationManager 網(wǎng)絡(luò)傳輸協(xié)議UDP、TCP、Http借笙、Socket扒怖、X...
    Carden閱讀 4,344評(píng)論 0 12
  • 在 WWDC 16 中,Apple 表示, 從 2017年1月1日起(最新消息, 實(shí)施時(shí)間已延期)业稼,所有新提交的 ...
    kmplayer閱讀 2,593評(píng)論 1 9
  • iOS網(wǎng)絡(luò)架構(gòu)討論梳理整理中盗痒。。低散。 其實(shí)如果沒(méi)有APIManager這一層是沒(méi)法使用delegate的俯邓,畢竟多個(gè)單...
    yhtang閱讀 5,193評(píng)論 1 23
  • 恍若 已隔三秋 飛絮輕吻著大地 夏蟬尚未高歌 幾許飛燕 啄春泥 棲于檐下 尚不知 三秋于你 又是 何般感受 是剎那...
    呦呦鹿鳴m閱讀 153評(píng)論 0 4