IOS中的網路編程詳解,IOS網路編程詳解

來源:互聯網
上載者:User

IOS中的網路編程詳解,IOS網路編程詳解

  在移動互連網時代,幾乎所有應用都需要用到網路,比如QQ、微博、網易新聞、優酷、百度地圖,只有通過網路跟外界進行資料互動、資料更新,應用才能保持新鮮、活力,如果沒有了網路,也就缺少了資料變化,無論外觀多麼華麗,終將變成一潭死水。下面我們嘗試一下如何進行網路請求

  http編程其實就是http請求。http請求最長用的方法是 get 和 post 方法。

  1>get方法和post方法相比理解起來比較簡單,get方法可以直接請求一個url,也可以url後面拼接上參數作為一個新的url地址進行請求。get方法後面的value要經過unicode編碼。form的enctype屬性預設為application/x-www-form-urlencoded。不能發送二進位檔案。
  2>post方法相對要複雜一些。首先post方法要設定key和value ,所有的key和value都會拼接成 key1=value1&key2=value2的樣式的字串,然後這個字串轉化為二進位放到 http請求的body中。當請求發送的時候,也就跟隨body一起傳給伺服器。http請求Content-Type設定為:application/x-www-form-urlencoded。這裡講的只是簡單的post請求,一般傳送檔案不會選擇這種方式(從技術方面考慮也可以傳送檔案,就是把檔案以 key 和 value的方式放入)。下面我們再討論一下post發送二進位檔案更加普遍的方法

 

1、發送請求

- (void)viewDidLoad {     //建立一個連結,別切拼接需要傳遞的參數,由於伺服器為本地搭建,接受兩個參數一個是使用者名稱,一個是使用者密碼,因此我這裡傳遞兩個參數過去,預設的是Get方式    NSURL * url=[NSURL URLWithString:@"http://192.168.0.111/logo.php?userName=jereh&pwd=123"];     //根據練級e    NSMutableURLRequest  * request=[NSMutableURLRequest requestWithURL:url];     //連結網路並發送請求    [NSURLConnection connectionWithRequest:request delegate:self];        }

2、接受返回的資料

網路請求後我們需要接受返回的資料,這裡我們需要實現代理方法來接受返回資料,這裡我們需要實現協議,並定義一個可變的NSData對象

以下幾個代理方法是經常用到的

#pragma mark - NSURLConnectionDataDelegate#pragma mark 剛接收到伺服器響應的時候調用- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{    self.data=[NSMutableData data];    NSLog(@"開始響應");}#pragma mark 開始接收伺服器傳遞資料的時候調用,由於當傳遞的資料很大的時候,系統會分多次接受,因此我們需要定義一個可變的二進位對象來儲存每次請求的資料- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{    NSLog(@"開始接收資料");    [self.data appendData:data];}#pragma mark 結束接收伺服器資料的時候調用- (void)connectionDidFinishLoading:(NSURLConnection *)connection{        NSString * str=[[NSString alloc] initWithData:self.data encoding:NSUTF8StringEncoding];    NSLog(@"%@",str);}#pragma mark 接受資料出錯的時候調用- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{    NSLog(@"請求出錯");}

3、POST方法請求

上面我們採用的get方法,如果我們採用POST方法如何請求呢,只需要將不可變的請求變為可變的請求然後設定方法即可

- (void)viewDidLoad {        //建立一個請求    NSURL * url=[NSURL URLWithString:@"http://192.168.0.111/logo.php?userName=jereh&pwd=123"];        NSMutableURLRequest  * request=[NSMutableURLRequest requestWithURL:url];    //設定方法    request.HTTPMethod=@"POST";        //設定參數    NSString * param=@"userName=jereh&&pwd=123";    NSData * data=[param dataUsingEncoding:NSUTF8StringEncoding];        //佈建要求體    request.HTTPBody=data;        //連結網路並發送請求    [NSURLConnection connectionWithRequest:request delegate:self];        }

4 同步方式發送請求

另外我們才發送請求的時候也可以採用同步方式的方式,如果我們在網路請求的時候需要等待網路請求結束在執行某個操作,我們可以採取同步請求

NSData * data= [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

5 block形式非同步請求

另外在發送非同步請求的時候,我們也可以採取block的形式,如下

NSOperationQueue * queue=[NSOperationQueue mainQueue];    [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {        NSString * str=[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];}];

 

作者:傑瑞教育
出處:http://www.cnblogs.com/jerehedu/ 
著作權聲明:本文著作權歸煙台傑瑞教育科技有限公司和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文串連,否則保留追究法律責任的權利。
技術諮詢: 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.