ios編程之網路請求

來源:互聯網
上載者:User

標籤:

網路請求有GET請求和POST請求,get和post實現的時候可以選擇同步或者非同步實現.看一個請求是GET還是POST就看網址後面有沒有攜帶請求體.

GET與POST 區別 1.get請求 請求的網址全部明文顯示 安全性不高
 2.get請求 請求的網址 有字元數的限制 大概255個
 3.post請求 請求的網址 不光是有一個請求的網址 還可以攜帶請求體 這個請求體 是以NSData形式存在 安全性較高
 4.post請求沒有字元數的限制GET同步和GET非同步同步請求是在請求資料的時候不能做其他事情 非同步請求在請求資料的時候可以做其他的事.GET同步請求的步驟1.建立一個網址對象 1 NSString *oldUrl = kSearchURL; 注意:如果你請求的網址中帶有中文 必須進行重新編碼
NSString *newUrl = [oldUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

然後把字串變成一個網址對象

 NSURL *url = [NSURL URLWithString:newUrl];

2.發出一個網路請求

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:30.0];

CachePolicy 緩衝策略 一般選預設策略  timeoutInterval 請求逾時時間  預設就是get請求 如果你要設定的話 需要是可變請求

3.佈建要求類型

[request setHTTPMethod:@"GET"];

4.建立連結 接收位元據

NSURLResponse *response = nil;NSError *error = nil;NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

Response 伺服器返回的 描述伺服器的資料 error 連結錯誤資訊 如果你不需要 描述伺服器的資料和錯誤資訊 可以填nil

然後可以把請求下來得資料轉換成json格式

NSMutableDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingMutableContainers) error:nil];    NSLog(@"%@", dataDic);

GET非同步請求步驟跟同步請求的前三步都是一樣的,區別主要是建立連結

第一步也是建立網址對象 然後利用網址對象建立一個請求類型為GET

GET請求有兩種方法 1.代理方法 2.block方法

非同步代理程式方法需要遵守一個協議NSURLConnectionDataDelegate,為了方便使用可以把連結聲明成一個屬性

NSURLConnection * connection;

self.connection = [NSURLConnection connectionWithRequest:request delegate:self];
開啟非同步請求[self.connection start];具體代碼如下:
@interface GetViewController ()<NSURLConnectionDataDelegate, NSURLConnectionDelegate>// 聲明一個可變的 data 用於拼接完整的方法@property (nonatomic, retain) NSMutableData *data;// 聲明一個連結屬性 用於終止網路請求@property (nonatomic, retain) NSURLConnection *connection;@end@implementation GetViewController- (void)dealloc{    // 如果本頁面被銷毀 那麼要終止網路請求    [_connection cancel];    [_data release];    [_connection release];    [super dealloc];}#pragma mark — NSURLConnectionDataDelegate 4個代理方法- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{    // 觸發方法 連結成功 初始化 可變data    self.data = [NSMutableData data];    NSLog(@"接收到伺服器數組, 說明 連結成功");}- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{    // 拼接data    [self.data appendData:data];    NSLog(@"接收資料時觸發");}- (void)connectionDidFinishLoading:(NSURLConnection *)connection{    // 該方法觸發 證明data已經完整    // 接下來 可以解析資料    NSMutableDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:self.data options:(NSJSONReadingMutableContainers) error:nil];    NSLog(@"%@", dataDic);    NSLog(@"已經完成載入");}- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{    NSLog(@"查看錯誤資訊");}#pragma mark -非同步請求block方法    // 非同步請求block方法    // 建立一個非同步請求連結    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {  NSLog(@"%d", [NSThread isMainThread]);// 非同步請求相當於 開啟一個子線程去載入資料// 資料載入完成 調用block 回到主線程 }];

POST非同步跟get方法類似 有代理方法和block方法 代理方法和block方法前三步是一樣的

 

//1.建立網址對象 NSURL *url = [NSURL URLWithString:kNewsListURL]; //2. 利用網址對象 建立一個可變請求    NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0]; //3.佈建要求類型    [request setHTTPMethod:@"POST"];    // 注意 :給這個請求 攜帶一個請求體    NSData *pramData = [kNewsListParam dataUsingEncoding:NSUTF8StringEncoding];    // 攜帶到請求體    [request setHTTPBody:pramData];    // 利用這個請求 建立一個連結 並得到返回的資料    NSURLResponse *response = nil;    NSError *error = nil;    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];    // 解析資料    NSMutableDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];    NSLog(@"%@", dataDic);POST非同步跟get方法類似 有代理方法和block方法 代理方法和block方法前三步是一樣的// 建立網址字元創 建立網址對象    NSURL *url = [NSURL URLWithString:kNewsListURL];    // 利用網址對象建立請求    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0];    // 佈建要求的類型    [request setHTTPMethod:@"POST"];    // 給這個請求 攜帶請求體    NSData *pramData = [kNewsListParam dataUsingEncoding:NSUTF8StringEncoding];    [request setHTTPBody:pramData];// 利用block方法完成一步請求    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {        // data就是請求完成的資料 解析就可以了        NSMutableDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];        NSLog(@"%@", dataDic); 利用請求建立連結 利用代理方法 實現一步請求資料    self.connection = [NSURLConnection connectionWithRequest:request delegate:self];    // 開啟連結    [self.connection start];#pragma mark - 代理方法- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{    // 初始化 data    self.data = [NSMutableData data];    NSLog(@"返回伺服器資訊, 證明連結成功了");}- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{    // 拼接data    [self.data appendData:data];    NSLog(@"每次返回一點資料 多次執行");}- (void)connectionDidFinishLoading:(NSURLConnection *)connection{    NSLog(@"%@", self.data);    NSLog(@"完成請求 此時可以進行 資料解析");}- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{    NSLog(@"返回錯誤資訊");}#import "PostViewController.h"@interface PostViewController ()<NSURLConnectionDataDelegate, NSURLConnectionDelegate>// 聲明一個可變data 進行非同步請求@property (nonatomic, retain) NSMutableData *data;// 聲明成屬性 在介面被銷毀時 終止請求@property (nonatomic, retain) NSURLConnection *connection;@end@implementation PostViewController- (void)dealloc{    [_connection cancel];    [_connection release];    [_data release];    [super dealloc];}

 

網路請求代碼有很多重複代碼 我們可以自己封裝一下.我個人感覺封裝有點類似數學中提取公因式,把相同的地方寫一個方法,然後給不同的參數

封裝網路請求可以想一下什麼東西是外邊給的,什麼事裡面封的.寫的有點多了,封裝就留給朋友吧.

 

ios編程之網路請求

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.