標籤:
資料請求總結
1 //**************************************GET 2 //同步 3 /* 4 //第一步,建立URL 5 NSURL * url = [[NSURL alloc]initWithString:@"http://e.hiphotos.baidu.com/image/w%3D1366%3Bcrop%3D0%2C0%2C1366%2C768/sign=66f9b9980ef431adbcd2473a7d0097cc/08f790529822720ed8bdbef079cb0a46f21fab4d.jpg"]; 6 //第二步,通過URL建立request請求 7 NSURLRequest * request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:15]; 8 //NSURLRequest初始化方法第一個參數:請求訪問路徑,第二個參數:緩衝協議,第三個參數:網路請求逾時時間(秒) 9 10 // 其中緩衝協議是個枚舉類型包含: 11 // 12 // NSURLRequestUseProtocolCachePolicy(基礎策略) 13 // 14 // NSURLRequestReloadIgnoringLocalCacheData(忽略本機快取) 15 // 16 // NSURLRequestReturnCacheDataElseLoad(首先使用緩衝,如果沒有本機快取,才從原地址下載) 17 // 18 // NSURLRequestReturnCacheDataDontLoad(使用本機快取,從不下載,如果本地沒有緩衝,則請求失敗,此策略多用於離線操作) 19 // 20 // NSURLRequestReloadIgnoringLocalAndRemoteCacheData(無視任何緩衝策略,無論是本地的還是遠端,總是從原地址重新下載) 21 // 22 // NSURLRequestReloadRevalidatingCacheData(如果本機快取是有效則不下載,其他任何情況都從原地址重新下載) 23 //第三步,串連伺服器 24 NSURLResponse * respones = nil; 25 NSError * error = nil; 26 NSData * reviced = [NSURLConnection sendSynchronousRequest:request returningResponse:&respones error:&error]; 27 //第四步,將資料轉換成圖片 28 UIImage * image = [[UIImage alloc]initWithData:reviced]; 29 _imageView.image = image; 30 */ 31 32 //非同步 33 /** 34 //第一步,建立URL 35 NSURL * url = [[NSURL alloc]initWithString:@"http://e.hiphotos.baidu.com/image/w%3D1366%3Bcrop%3D0%2C0%2C1366%2C768/sign=66f9b9980ef431adbcd2473a7d0097cc/08f790529822720ed8bdbef079cb0a46f21fab4d.jpg"]; 36 //第二步,通過URL建立request請求 37 NSURLRequest * request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:15]; 38 //第三步,串連伺服器 39 [NSURLConnection connectionWithRequest:request delegate:self];//(需要在.h中指定代理方法) 40 //接受到伺服器的回應調用 41 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 42 { 43 [self.reviceData setLength:0 ]; 44 45 } 46 //資料轉送中一直調用 47 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 48 { 49 [self.reviceData appendData:data]; 50 51 } 52 //資料轉送完才會調用 53 - (void)connectionDidFinishLoading:(NSURLConnection *)connection 54 { 55 UIImage * image = [[UIImage alloc]initWithData:self.reviceData]; 56 _imageView.image = image; 57 58 } 59 */ 60 61 62 //**************************************POST 63 //同步 64 /** 65 //第一步,建立URL 66 NSURL * url = [[NSURL alloc]initWithString:@"http://api.hudong.com/iphonexml.do"]; 67 //第二步,通過URL建立可變的request請求(只有建立可變的request才能設定POST請求) 68 NSMutableURLRequest * request1 = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:100]; 69 //timeoutInterval:post逾時最大時間是240秒,在方法中設定多少秒也沒用。 70 71 //第三步,設定POST請求方式 72 [request1 setHTTPMethod:@"POST"]; 73 //第四步,設定參數 74 NSString * bodyStr = @"type=focus-c"; 75 NSData * body = [bodyStr dataUsingEncoding:NSUTF8StringEncoding]; 76 [request1 setHTTPBody:body]; 77 //第五步,串連伺服器 78 NSData * data = [NSURLConnection sendSynchronousRequest:request1 returningResponse:nil error:nil]; 79 NSString * str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; 80 NSLog(@"%@",str); 81 */ 82 83 84 //非同步 85 /** 86 //第一步,建立URL 87 NSURL * url = [[NSURL alloc]initWithString:@"http://api.hudong.com/iphonexml.do"]; 88 //第二步,通過URL建立可變的request請求(只有建立可變的request才能設定POST請求) 89 NSMutableURLRequest * request1 = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:100]; 90 //timeoutInterval:post逾時最大時間是240秒,在方法中設定多少秒也沒用。 91 92 //第三步,設定POST請求方式 93 [request1 setHTTPMethod:@"POST"]; 94 //第四步,設定參數 95 NSString * bodyStr = @"type=focus-c"; 96 NSData * body = [bodyStr dataUsingEncoding:NSUTF8StringEncoding]; 97 [request1 setHTTPBody:body]; 98 //第五步,串連伺服器 99 [[NSURLConnection alloc]initWithRequest:request2 delegate:self]100 101 //接受到伺服器的回應調用102 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response103 {104 [self.reviceData setLength:0 ];105 106 }107 //資料轉送中一直調用108 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data109 {110 [self.reviceData appendData:data];111 112 }113 //資料轉送完才會調用114 - (void)connectionDidFinishLoading:(NSURLConnection *)connection115 {116 NSString * str = [[NSString alloc]initWithData:self.reviceData encoding:NSUTF8StringEncoding];117 NSLog(@"%@",str);118 }119 */120 121 122 //委託方法123 /*124 一般用到四個委託方法:125 126 //接受到respone,這裡麵包含了HTTP請求狀態代碼和資料頭資訊,包括資料長度、編碼格式等127 -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ NSLog(@"response = %@",response); _backData = [[NSMutableData alloc]init];128 }129 130 //接受到資料時調用,完整的資料可能拆分為多個包發送,每次接受到資料片段都會調用這個方法,所以需要一個全域的NSData對象,用來把每次的資料拼接在一起131 -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{132 [_backData appendData:data];133 }134 135 //資料接受結束時調用這個方法,這時的資料就是獲得的完整資料了,可以使用資料做之後的處理了136 -(void)connectionDidFinishLoading:(NSURLConnection *)connection{137 NSLog(@"%@",[[NSString alloc]initWithData:_backData encoding:NSUTF8StringEncoding]);138 }139 140 //這是請求出錯是調用,錯誤處理不可忽視141 -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{142 if (error.code == NSURLErrorTimedOut) {143 NSLog(@"請求逾時");144 }145 NSLog(@"%@",[error localizedDescription]);146 }147 148 */
iOS開發——網路編程OC篇&資料請求總結