iOS 中的网络请求 (同步请求、异步请求、GET请求、POST请求)
1、同步請求可以從因特網請求數據,一旦發送同步請求,程序將停止用戶交互,直至服務器返回數據完成,才可以進行下一步操作,
2、異步請求不會阻塞主線程,而會建立一個新的線程來操作,用戶發出異步請求后,依然可以對UI進行操作,程序可以繼續運行
3、GET請求,將參數直接寫在訪問路徑上。操作簡單,不過容易被外界看到,安全性不高,地址最多255字節;
4、POST請求,將參數放到body里面。POST請求操作相對復雜,需要將參數和地址分開,不過安全性高,參數放在body里面,不易被捕獲。
5、同步和異步的區別在于連接方式不同:
?同步用:?
?NSData?* data = [NSURLConnection sendSynchronousRequest:request returningResponse:Nil?error:nil];
?
異步用:
?NSURLConnection?* connection = [[NSURLConnection?alloc]initWithRequest:request delegate:self];(需要在.h中指定代理)
?
6、同步GET請求
//第一步,創建URL NSURL * url = [[NSURL alloc]initWithString:@"http://e.hiphotos.baidu.com/image/w%3D1366%3Bcrop%3D0%2C0%2C1366%2C768/sign=66f9b9980ef431adbcd2473a7d0097cc/08f790529822720ed8bdbef079cb0a46f21fab4d.jpg"]; //第二步,通過URL創建request請求 NSURLRequest * request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:15]; //NSURLRequest初始化方法第一個參數:請求訪問路徑,第二個參數:緩存協議,第三個參數:網絡請求超時時間(秒) // 其中緩存協議是個枚舉類型包含: // // NSURLRequestUseProtocolCachePolicy(基礎策略) // // NSURLRequestReloadIgnoringLocalCacheData(忽略本地緩存) // // NSURLRequestReturnCacheDataElseLoad(首先使用緩存,如果沒有本地緩存,才從原地址下載) // // NSURLRequestReturnCacheDataDontLoad(使用本地緩存,從不下載,如果本地沒有緩存,則請求失敗,此策略多用于離線操作) // // NSURLRequestReloadIgnoringLocalAndRemoteCacheData(無視任何緩存策略,無論是本地的還是遠程的,總是從原地址重新下載) // // NSURLRequestReloadRevalidatingCacheData(如果本地緩存是有效的則不下載,其他任何情況都從原地址重新下載) //第三步,連接服務器 NSURLResponse * respones = nil; NSError * error = nil; NSData * reviced = [NSURLConnection sendSynchronousRequest:request returningResponse:&respones error:&error]; //第四步,將數據轉換成圖片 UIImage * image = [[UIImage alloc]initWithData:reviced]; _imageView.image = image;
?
7.異步GET請求
//第一步,創建URL NSURL * url = [[NSURL alloc]initWithString:@"http://e.hiphotos.baidu.com/image/w%3D1366%3Bcrop%3D0%2C0%2C1366%2C768/sign=66f9b9980ef431adbcd2473a7d0097cc/08f790529822720ed8bdbef079cb0a46f21fab4d.jpg"]; //第二步,通過URL創建request請求 NSURLRequest * request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:15]; //第三步,連接服務器 [NSURLConnection connectionWithRequest:request delegate:self];//(需要在.h中指定代理方法) //接受到服務器的回應調用 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { [self.reviceData setLength:0 ]; } //數據傳輸中一直調用 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [self.reviceData appendData:data]; } //數據傳輸完才會調用 - (void)connectionDidFinishLoading:(NSURLConnection *)connection { UIImage * image = [[UIImage alloc]initWithData:self.reviceData]; _imageView.image = image; }
?
8、同步POST請求
//第一步,創建URL NSURL * url = [[NSURL alloc]initWithString:@"http://api.hudong.com/iphonexml.do"]; //第二步,通過URL創建可變的request請求(只有創建可變的request才能設置POST請求) NSMutableURLRequest * request1 = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:100]; //timeoutInterval:post超時最大時間是240秒,在方法中設置多少秒也沒用。 //第三步,設置POST請求方式 [request1 setHTTPMethod:@"POST"]; //第四步,設置參數 NSString * bodyStr = @"type=focus-c"; NSData * body = [bodyStr dataUsingEncoding:NSUTF8StringEncoding]; [request1 setHTTPBody:body]; //第五步,連接服務器 NSData * data = [NSURLConnection sendSynchronousRequest:request1 returningResponse:nil error:nil]; NSString * str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"%@",str);
?
9、異步POST請求
//第一步,創建URL NSURL * url = [[NSURL alloc]initWithString:@"http://api.hudong.com/iphonexml.do"]; //第二步,通過URL創建可變的request請求(只有創建可變的request才能設置POST請求) NSMutableURLRequest * request1 = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:100]; //timeoutInterval:post超時最大時間是240秒,在方法中設置多少秒也沒用。 //第三步,設置POST請求方式 [request1 setHTTPMethod:@"POST"]; //第四步,設置參數 NSString * bodyStr = @"type=focus-c"; NSData * body = [bodyStr dataUsingEncoding:NSUTF8StringEncoding]; [request1 setHTTPBody:body]; //第五步,連接服務器 [[NSURLConnection alloc]initWithRequest:request2 delegate:self] //接受到服務器的回應調用 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { [self.reviceData setLength:0 ]; } //數據傳輸中一直調用 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [self.reviceData appendData:data]; } //數據傳輸完才會調用 - (void)connectionDidFinishLoading:(NSURLConnection *)connection { NSString * str = [[NSString alloc]initWithData:self.reviceData encoding:NSUTF8StringEncoding]; NSLog(@"%@",str); }
?
轉載于:https://www.cnblogs.com/onecrow/articles/5054928.html
總結
以上是生活随笔為你收集整理的iOS 中的网络请求 (同步请求、异步请求、GET请求、POST请求)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: K均值与C均值区别
- 下一篇: 个人所得税计算器2016 by Jack