ios 基于http協(xié)議檢測(cè)網(wǎng)絡(luò)是否真正可用(連通)的方法

接觸過(guò)ios開(kāi)發(fā)的人應(yīng)該都知道,對(duì)于檢測(cè)網(wǎng)絡(luò)連接狀態(tài)AFN基本上已經(jīng)夠用了,但是最近幾年興起的商超,大型酒店飯店等娛樂(lè)場(chǎng)所的portal認(rèn)證,需要檢測(cè)手機(jī)是否真正能上網(wǎng)!(一種偽聯(lián)網(wǎng)狀態(tài),就是已經(jīng)連接到了wifi,但是不能真正上網(wǎng)).此時(shí)原因是因?yàn)閍p設(shè)備的網(wǎng)關(guān)并沒(méi)有放行,但是這種狀態(tài)通過(guò)AF并不能檢測(cè)出來(lái).
#試過(guò)很多種方法,基于tcp協(xié)議的socket通信,基于ICMP協(xié)議的ping,基于http協(xié)議的網(wǎng)絡(luò)請(qǐng)求.
下面要講的就是基于http協(xié)議的網(wǎng)絡(luò)請(qǐng)求來(lái)辨別真正的聯(lián)網(wǎng)狀態(tài)!
以前寫(xiě)過(guò)一遍基于tcp協(xié)議的socket通信的,有興趣的可以翻翻.

  #define kAppleUrlTocheckWifi @"http://captive.apple.com"
//檢測(cè)網(wǎng)絡(luò)是否可以使用
+(BOOL)checkNetworkCanUse{

    // 1.將網(wǎng)址初始化成一個(gè)OC字符串對(duì)象
    NSString *urlStr = kAppleUrlTocheckWifi;
    // 如果網(wǎng)址中存在中文,進(jìn)行URLEncode
    NSString *newUrlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    // 2.構(gòu)建網(wǎng)絡(luò)URL對(duì)象, NSURL
    NSURL *url = [NSURL URLWithString:newUrlStr];
    // 3.創(chuàng)建網(wǎng)絡(luò)請(qǐng)求
    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:3];
    // 創(chuàng)建同步鏈接
    NSURLResponse *response = nil;
    NSError *error = nil;
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    
    NSString* result1 = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
    //解析html頁(yè)面
    NSString *str = [self flattenHTML:result1];
    //除掉換行符
    NSString *nstr = [str stringByReplacingOccurrencesOfString:@"\n" withString:@""];
    
    if ([nstr isEqualToString:@"SuccessSuccess"])
    {
       // NSLog(@"可以上網(wǎng)了");
     //   [PronetwayGeneralHandle shareHandle].NetworkCanUse = YES;
        return YES;
    }else {
       // NSLog(@"未聯(lián)網(wǎng)");
        //[self showNetworkStatus:@"未聯(lián)網(wǎng)"];
     //   [PronetwayGeneralHandle shareHandle].NetworkCanUse = NO;
        return NO;
    }

}


//過(guò)濾后臺(tái)返回字符串中的標(biāo)簽
+ (NSString *)flattenHTML:(NSString *)html {
    
    NSScanner *theScanner;
    NSString *text = nil;
    
    theScanner = [NSScanner scannerWithString:html];
    
    while ([theScanner isAtEnd] == NO) {
        // find start of tag
        [theScanner scanUpToString:@"<" intoString:NULL] ;
        // find end of tag
        [theScanner scanUpToString:@">" intoString:&text] ;
        // replace the found tag with a space
        //(you can filter multi-spaces out later if you wish)
        html = [html stringByReplacingOccurrencesOfString:
                [NSString stringWithFormat:@"%@>", text]
                                               withString:@""];
    }
    return html;
}

這個(gè)網(wǎng)址是后臺(tái)抓包抓到的,就是portal認(rèn)證的原理是通過(guò)重定向頁(yè)面來(lái)實(shí)現(xiàn)的,ios設(shè)備在連接wifi之后,會(huì)向這個(gè)網(wǎng)址發(fā)送一個(gè)請(qǐng)求,來(lái)檢測(cè)聯(lián)網(wǎng)狀態(tài)..所以這個(gè)是蘋(píng)果的地址 ,改變的可能性為0 其實(shí)也可以自己寫(xiě)個(gè)后臺(tái),弄一個(gè)外網(wǎng)地址,自己去請(qǐng)求,看返回結(jié)果,原理是一樣的.


#define kAppleUrlTocheckWifi @"http://captive.apple.com"

好了 ,如此就解決了.另外,這個(gè)是同步請(qǐng)求,會(huì)阻塞線程的,所以請(qǐng)求的超時(shí)時(shí)間設(shè)置的不易過(guò)長(zhǎng)!

最后推薦一個(gè)技術(shù)交流群,里面大神很多! 529043462

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末亲轨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子辅甥,更是在濱河造成了極大的恐慌,老刑警劉巖毁习,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梢睛,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蠢古,警方通過(guò)查閱死者的電腦和手機(jī)辕棚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)欲主,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)邓厕,“玉大人,你說(shuō)我怎么就攤上這事扁瓢∠昴眨” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵引几,是天一觀的道長(zhǎng)昧互。 經(jīng)常有香客問(wèn)我,道長(zhǎng)伟桅,這世上最難降的妖魔是什么敞掘? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮楣铁,結(jié)果婚禮上玖雁,老公的妹妹穿的比我還像新娘。我一直安慰自己盖腕,他們只是感情好赫冬,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著溃列,像睡著了一般劲厌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上听隐,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天补鼻,我揣著相機(jī)與錄音,去河邊找鬼雅任。 笑死风范,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的椿访。 我是一名探鬼主播乌企,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼虑润,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼成玫!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起拳喻,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤哭当,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后冗澈,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體钦勘,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年亚亲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了彻采。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腐缤。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖肛响,靈堂內(nèi)的尸體忽然破棺而出岭粤,到底是詐尸還是另有隱情,我是刑警寧澤特笋,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布剃浇,位于F島的核電站,受9級(jí)特大地震影響猎物,放射性物質(zhì)發(fā)生泄漏虎囚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一蔫磨、第九天 我趴在偏房一處隱蔽的房頂上張望淘讥。 院中可真熱鬧,春花似錦质帅、人聲如沸适揉。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)嫉嘀。三九已至,卻和暖如春魄揉,著一層夾襖步出監(jiān)牢的瞬間剪侮,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工洛退, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瓣俯,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓兵怯,卻偏偏與公主長(zhǎng)得像彩匕,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子媒区,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

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