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