1-NSURLConnection使用

1.NSURLConnection使用

  • 1.1 NSURLConnection同步請求(GET)

(1)步驟
1. 設置請求路徑
2. 創建請求對象(默認是GET請求,且已經默認包含了請求頭)
3. 使用NSURLSession sendsync方法發送網絡請求
4. 接收到服務器的響應后,解析響應體

(2)相關代碼

//1.確定請求路徑
    NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=singerYoung&pwd=singerYoung&type=XML"];
//    NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/video?type=XML"];

    //2.創建一個請求對象
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    //3.把請求發送給服務器
    //sendSynchronousRequest  阻塞式的方法,會卡住線程

    NSHTTPURLResponse *response = nil;
    NSError *error = nil;

    /*
     第一個參數:請求對象
     第二個參數:響應頭信息,當該方法執行完畢之后,該參數被賦值
     第三個參數:錯誤信息,如果請求失敗,則error有值
     */
     //該方法是阻塞式的,會卡住線程
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

    //4.解析服務器返回的數據
    NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

  • 1.2 NSURLConnection異步請求(GET-SendAsync)

(1)相關說明

01 該方法不會卡住當前線程,網絡請求任務是異步執行的

(2)相關代碼

//1.確定請求路徑
    NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=singerYoung&pwd=singerYoung"];

    //2.創建一個請求對象
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    //3.把請求發送給服務器,發送一個異步請求
    /*
     第一個參數:請求對象
     第二個參數:回調方法在哪個線程中執行,如果是主隊列則block在主線程中執行,非主隊列則在子線程中執行
     第三個參數:completionHandlerBlock塊:接受到響應的時候執行該block中的代碼
        response:響應頭信息
        data:響應體
        connectionError:錯誤信息,如果請求失敗,那么該參數有值
     */
    [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse * __nullable response, NSData * __nullable data, NSError * __nullable connectionError) {

        //4.解析服務器返回的數據
        NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
        //轉換并打印響應頭信息
        NSHTTPURLResponse *r = (NSHTTPURLResponse *)response;
        NSLog(@"--%zd---%@--",r.statusCode,r.allHeaderFields);
    }];

  • 1.3 NSURLConnection異步請求(GET-代理)

(1)步驟

01 確定請求路徑
02 創建請求對象
03 創建NSURLConnection對象并設置代理
04 遵守NSURLConnectionDataDelegate協議,并實現相應的代理方法
05 在代理方法中監聽網絡請求的響應

(2)設置代理的幾種方法

  //設置代理的第一種方式:自動發送網絡請求
  NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self];

  //設置代理的第二種方式:使用類方法設置代理,會自動發送網絡請求
  NSURLConnection *conn = [NSURLConnection connectionWithRequest:request delegate:self];     

   /*
   設置代理的第三種方式:
   第一個參數:請求對象
   第二個參數:誰成為NSURLConnetion對象的代理
   第三個參數:是否馬上發送網絡請求,如果該值為YES則立刻發送,如果為NO則不會發送網路請求
   */
  NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:NO];

//調用該方法控制網絡請求的發送(當為NO的時候,調用這方法會立即發送網絡請求)
  [conn start];
//取消網絡請求
//[conn cancel];

(3)相關的代理方法

/*
 1.當接收到服務器響應的時候調用
 第一個參數connection:監聽的是哪個NSURLConnection對象
 第二個參數response:接收到的服務器返回的響應頭信息
 */
- (void)connection:(nonnull NSURLConnection *)connection didReceiveResponse:(nonnull NSURLResponse *)response

/*
 2.當接收到數據的時候調用,該方法會被調用多次
 第一個參數connection:監聽的是哪個NSURLConnection對象
 第二個參數data:本次接收到的服務端返回的二進制數據(可能是片段)
 */
- (void)connection:(nonnull NSURLConnection *)connection didReceiveData:(nonnull NSData *)data
/*

 3.當服務端返回的數據接收完畢之后會調用
 通常在該方法中解析服務器返回的數據
 */
-(void)connectionDidFinishLoading:(nonnull NSURLConnection *)connection

/*4.當請求錯誤的時候調用(比如請求超時)
 第一個參數connection:NSURLConnection對象
 第二個參數:網絡請求的錯誤信息,如果請求失敗,則error有值
 */
- (void)connection:(nonnull NSURLConnection *)connection didFailWithError:(nonnull NSError *)error

(4)其它知識點

    01 關于消息彈窗第三方框架的使用
        SVProgressHUD
    02 字符串截取相關方法
    - (NSRange)rangeOfString:(NSString *)searchString;
    - (NSString *)substringWithRange:(NSRange)range;
  • 1.4 NSURLConnection發送POST請求

(1)發送POST請求步驟

a.確定URL路徑
b.創建請求對象(可變對象)
c.修改請求對象的方法為POST,設置請求體(Data)
d.發送一個異步請求
e.補充:設置請求超時,處理錯誤信息,設置請求頭(如獲取客戶端的版本等等,請求頭是可設置可不設置的)

(2)相關代碼

 //1.確定請求路徑
    NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login"];

    //2.創建請求對象
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    //2.1更改請求方法(POST必須大寫)
    request.HTTPMethod = @"POST";

    //2.2設置請求體
    request.HTTPBody = [@"username=singerYoung&pwd=singerYoung" dataUsingEncoding:NSUTF8StringEncoding];

    //2.3請求超時
    request.timeoutInterval = 5;

    //2.4設置請求頭(一般不自定義,因為請求體里包含了請求頭了,看公司和項目需要)
    //獲取硬件設備版本號
    //[UIDevice currentDevice].systemVersion
    //注意,key是固定的
    [request setValue:@"ios 9.0" forHTTPHeaderField:@"User-Agent"];


    //3.發送請求(隊列決定block里的實在那個隊列里調用,并不是這整個方法)
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * __nullable response, NSData * __nullable data, NSError * __nullable connectionError) {

        //4.解析服務器返回的數據
        if (connectionError) {
            NSLog(@"--請求失敗-");
        }else
        {
            NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
        }

    }];
  • 1.5 URL中文轉碼問題
    get請求需要轉,post請求不需要轉
   //1.確定請求路徑,如果字符串中有中文,那么需要對字符串進行中文轉碼
    NSString *urlStr = @"http://120.25.226.186:32812/login2?username=小小羊&pwd=singerYoung";
    NSLog(@"%@",urlStr);
    //中文轉碼操作
    urlStr =  [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSLog(@"%@",urlStr);

    NSURL *url = [NSURL URLWithString:urlStr];

  • Posted by *** singerYoung ***
  • 聯系作者 簡書·singerYoung 新浪微博·小小羊run
  • 原創文章,版權聲明:自由轉載-非商用-非衍生-保持署名
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,732評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,214評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,781評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,588評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,315評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,699評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,698評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,882評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,441評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,189評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,388評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,933評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,613評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,023評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,310評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,112評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,334評論 2 377

推薦閱讀更多精彩內容