多线程与网络之NSURLConnection发送请求
生活随笔
收集整理的這篇文章主要介紹了
多线程与网络之NSURLConnection发送请求
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
HTTP
- 1.簡介
- 1.URL:統一資源分配符
- 2.協議名://主機地址/路徑
- 3.HTTP: 超文本傳輸協議
NSURLConnection
-
1.基本簡介:
- 1.1 NSURLRequest: 一個這對象代表一個請求,里面有:
- 一個NSURL對象
- 請求方法,請求頭,請求體
- 請求超時...
- 1.2 NSMutableURLRequest: NSURLRequest的子類
- 1.1 NSURLRequest: 一個這對象代表一個請求,里面有:
-
2.使用步驟:
- 2.1 創建一個NSURL對象,設置請求路徑(協議名://主機地址/路徑 + ? + 參數1 & 參數2)
- 2.2 傳入NSURL創建一個NSURLRequest對象,設置請求頭和請求體(默認就有)
- 2.3 使用NSURLConnection發送請求(得到服務器返回的數據)
- 2.5 解析服務器響應的數據(將NSData轉成NSString)
-
3.發送GET請求
// 第一種:同步 // 1.創建一個NSURL對象,設置請求路徑 NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=xiao&pwd=xiao&type=JSON"];// 2.傳入NSURL創建一個NSURLRequest對象,設置請求頭和請求體(默認存在) NSURLRequest *request = [NSURLRequest requestWithURL:url];// 3.使用NSURLConnection發送請求,得到服務器返回的NSData數據 NSURLResponse *response = nil; // 真實類型是NSHTTPURLResponse NSError *error = nil; /*第一個參數:請求對象第二個參數:響應頭信息,傳地址第三個參數:錯誤信息, 傳地址*/ [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];// 第二種:異步 // 1.創建一個NSURL對象.設置請求路徑 NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=520it&pwd=520it&type=JSON"]; // 2.創建一個NSURLRequest對象,設置請求頭和請求體(默認存在) NSURLRequest *request = [NSURLRequest requestWithURL:url]; // 3.使用NSURLConnection發送網絡請求 [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {NSLog(@"%@", [NSThread currentThread]);// 4.解析服務器響應的數據NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];NSLog(@"%@", str); }];// 第三種:(異步代理)注意data一定要拼接 - (void)sendAsyncDelegate { // 1.創建一個NSURL對象,設置請求路徑 NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=520it&pwd=520it&type=JSON"]; // 2.創建一個NSURLRequest對象,設置請求頭和請求體(默認存在) NSURLRequest *request = [NSURLRequest requestWithURL:url];// 3.使用NSURLConnection來發送請求(返回服務器響應的數據) // [NSURLConnection connectionWithRequest:request delegate:self]; // 第一種 // [[NSURLConnection alloc] initWithRequest:request delegate:self]; // 第二種NSURLConnection *connect = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO]; // 第三種 // 如果 startImmediately 設置成NO時,必須調用start方法調用 [connect start]; } // 實現代理方法 // 1.當接受到服務器響應的時候調用 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { self.dataM = [NSMutableData data]; } // 2.當接收到服務器返回的二進制數據的時候調用, 會調用多次 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [self.dataM appendData:data]; } // 3.當請求失敗或者錯誤的時候調用(請求超時) - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {} // 4.當請求結束的事后調用 - (void)connectionDidFinishLoading:(NSURLConnection *)connection { // 解析數據 NSString *str = [[NSString alloc] initWithData:self.dataM encoding:NSUTF8StringEncoding]; NSLog(@"%@", str); } -
4.發送POST請求
// 1.創建NSURL NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login"];// 2.創建NSMutableURLRequest NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; // 2.1 設置NSMutableURLRequest的屬性 request.HTTPMethod = @"POST"; request.HTTPBody = [@"username=520it&pwd=520it&type=JSON" dataUsingEncoding:NSUTF8StringEncoding];request.timeoutInterval = 10.0; //過期時間[request setValue:@"ios10" forHTTPHeaderField:@"User-Agent"];// 3.發送請求 [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {// 解析數據NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); }];
轉載于:https://www.cnblogs.com/LongLJ/p/5084337.html
總結
以上是生活随笔為你收集整理的多线程与网络之NSURLConnection发送请求的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Session问题
- 下一篇: 利用redis写webshell