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);
} 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!