簡介服務器
NSURLConnection:網絡
做用: 一、負責發送請求,創建客戶端和服務器的鏈接發送數據給服務器 二、並收集來自服務器的響應數據 步驟: 一、建立一個NSURL對象,設置請求路徑 二、傳入NSURL並建立一個NSURLRequest對象,設置請求頭和請求體 三、使用NSURLConnection發送請求
常見類
```objc
一、NSURL:收納請求的地址app
二、NSURLRequest:一個NSURLRequest對象就表明一個請求,它包含的信息有一個NSURL對象、請求方法、請求頭、請求體等等 三、NSMutableURLRequest是NSURLRequest的子類```
-(void)sendSynchronousRequest{ //一、建立一個URL //協議頭+主機地址+接口名稱+?+參數1&參數2&參數3 //這裏的話是我本身使用.Net開發的一個本地後臺接口 http://192.168.1.0:8080/login?username=LitterL&pwd=123 NSURL *url = [NSURL URLWithString:@"http://192.168.1.0:8080/login?username=LitterL&pwd=123"]; //二、建立請求(Request)對象(默認爲GET請求); NSURLRequest *requst = [[NSURLRequest alloc]initWithURL:url]; //三、發送請求 /* 第一個參數:請求對象 第二個參數:響應頭 第三個參數:錯誤信息 返回值:NSData類型,響應體信息 */ NSError *error = nil; NSURLResponse *response = nil; //發送同步請求(sendSynchronousRequest) NSData *data = [NSURLConnection sendSynchronousRequest:requst returningResponse:&response error:&error]; //若是沒有錯誤就執行 if (!error) { //打印的服務端返回的信息以及錯誤信息 NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]); NSLog(@"%@",error); } }
補充:異步
一、上面的話默認爲GET請求,能夠看到協議頭+主機地址+接口名稱+?+參數1&參數2,這裏的話教你們一個技巧,若是看到接口後面是帶問號(?)那麼就證實它爲GET請求,至於POST請求的話在異步請求裏面會告訴你們 二、這裏的話默認是在主隊列執行的,爲同步請求,通常不建議你們使用這個,開發人員通常使用的方式是異步執行的,也就是下面這種方式,由於它是在後臺線程執行。
異步請求函數
-(void)sendAsynchronousRequest{ //一、建立一個URL NSURL *url = [NSURL URLWithString:@"http://192.168.1.0:8080/login"]; //二、建立請求(Request)對象 這裏使用的是它的子類NSMutableURLRequest,由於子類才具備設置方法和設置請求體的屬性 NSMutableURLRequest *requst = [[NSMutableURLRequest alloc]initWithURL:url]; //2.一、設置請求方法 requst.HTTPMethod = @"POST"; //2.二、設置請求體,由於傳入的爲Data數據全部這裏須要轉換 requst.HTTPBody = [@"username=LitterL&pwd=123" dataUsingEncoding:NSUTF8StringEncoding]; //2.三、設置請求超時時間,若是超過這個時間,請求爲失敗 requst.timeoutInterval = 10; //三、發送請求 /* 第一個參數:請求對象 第二個參數:隊列 第三個參數:Block回調函數 response:響應頭 data:響應體信息 connectionError:錯誤信息 */ //發送異步請求(sendAsynchronousRequest) [NSURLConnection sendAsynchronousRequest:requst queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { NSLog(@"----%@",[NSThread currentThread]); //解析數據 NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]); }]; }
補充:atom
一、在這裏的話是咱們是使用了POST請求,然而使用POST請求那麼就必須的使用NSURLRequest的子類NSMutableURLRequest. 二、只有在它的裏面才具備設置請求方法和方法體的屬性
代理請求url
//若是你使用的是代理請求的話,那麼你須要知道四個方法: 一、當接受到服務器響應的時候會調用:response(響應頭) -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response; 二、當接受到服務器返回數據的時候調用(會調用屢次) - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data; 三、當請求失敗的時候調用 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error; 四、當請求結束(成功|失敗)的時候調用 - (void)connectionDidFinishLoading:(NSURLConnection *)connection;
一、首先實現代理,並定義一個NSData對象初始化,在請求結束的時候查看服務器傳來的內容, @interface ViewController ()<NSURLConnectionDataDelegate> /** 可變的二進制數據 */ @property (nonatomic, strong) NSMutableData *fileData; @end /* 懶加載 */ -(NSMutableData *)fileData{ if (!_fileData) { _fileData = [[NSMutableData alloc]init]; } return _fileData; } 二、實現代理中的四個方法 //1.當接受到服務器響應的時候會調用:response(響應頭) -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { NSLog(@"接受到相應"); } //2.當接受到服務器返回數據的時候調用(會調用屢次) -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { // NSLog(@"接受到數據"); //拼接數據 [self.fileData appendData:data]; } //3.當請求失敗的時候調用 -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { NSLog(@"請求失敗"); } //4.當請求結束(成功|失敗)的時候調用 -(void)connectionDidFinishLoading:(NSURLConnection *)connection { NSLog(@"請求結束"); //解析數據 NSLog(@"%@",[[NSString alloc]initWithData:self.fileData encoding:NSUTF8StringEncoding]); } 三、最後編寫點擊時調用的方法 -(void)sendRequestWithDelegate{ //1.肯定請求路徑 NSURL *url = [NSURL URLWithString:@"http://192.168.1.0:8080/login?username=LitterL&pwd=123"]; //2.建立請求對象 NSURLRequest *request = [NSURLRequest requestWithURL:url]; //三、代理請求 /* 第一個參數:請求對象 第二個參數:誰成爲代理 第三個參數:startImmediately :是否當即開始發送網絡請求 */ NSURLConnection *connect = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:NO]; //[connect cancel]; 取消 [connect start]; }
結束線程
本章到此結束 歡迎各位碼友隨意轉載並指正