iOS的基礎網路程式設計
如有錯誤請指出
首先在進行網路程式設計時我們要對HTTP協議有一定的瞭解。HTTP協議,全稱“超文字傳輸協議”,瀏覽器和伺服器之間的通訊規則,HTTP協議永遠都是客戶端發起請求,伺服器回送響應。客戶端傳送一個請求,是向伺服器提交一個請求包,伺服器收到請求後,會向客戶端回應一個響應包。HTTP的請求包由兩部分組成:請求頭和請求體。同理響應包也有響應頭和響應體。伺服器是通過響應包將資料傳送給客戶端,資料主要在響應包得響應體中,響應頭中有相應的資料的型別以及狀態碼。HTTP常見的請求方式有兩種,一種是GET請求,是向伺服器索取資料的一種請求方式,只有請求頭,另外一種是POST請求,是向伺服器提交資料的一種方式請求方式,有請求頭和請求體。
講完了HTTP的相關知識,現在給大家講一下接下來要用到的類。
1.NSURLRequest 用於儲存客戶端傳送給伺服器的資料包資訊和請求設定,因為其基本設定選項較少所以我們一般使用其子類:NSMutableURLRequest。
2.NSURLResponse用於儲存伺服器返回的響應包資料,如果傳送的是HTTP請求,那麼使用其子類:NSHTTPURLResponse
3.NSURLSession指的是一個網路會話(session),一個網路會話可以發起多個任務(Task),一個任務對應了一次網路請求。
Task有三種型別:
(1).NSURLSessionDataTask:資料任務,擅長處理小且頻繁的應用程式之間的請求。
(2).NSURLSessionUploadTask:上傳任務,以檔案的形式傳送資料,可以在 程式沒有執行時進行後臺上傳。
(3).NSURLSessionDownloadTask:下載任務,以檔案的形式接受資料,可以在程式沒有執行時進行後臺下載。
4.NSURLSessionConfiguration用於配置建立Session的型別,總共有三個型別:
(1).deafaultSessionConfiguration用於建立預設型別的Session物件,
(2).ephemeralSessionConfiguration建立臨時型別的Session物件
(3).backgroundSessionConfiguration:(NSString *)identifier用於建立後臺Session物件
網路請求的基本流程:
使用NSURLSession進行網路請求的流程:
1.構造NSURL
2.構造NSURLRequest請求物件
3.構造NSURLSession會話物件
4.建立網路請求任務:dataTask, downloadTask, uploadTask
5.傳送網路請求
GET程式碼:
//請求網址
NSURL *url = [NSURL URLWithString:@"http://piao.163.com/m/cinema/list.html?app_id=1&mobileType=iPhone&ver=2.6&channel=appstore&deviceId=9E89CB6D-A62F-438C-8010-19278D46A8A6&apiVer=6&city=110000"];
//設定request屬性
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @"GET";
request.timeoutInterval = 60;
//建立session,預設是多執行緒
NSURLSession *session = [NSURLSession sharedSession];
//設定任務及其回撥的Block
NSURLSessionDataTask *dataTsk = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (error) {
NSLog(@"請求出錯:%@",error);
return;
}
NSError *jsonError = nil;
//獲取響應的資料
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&jsonError];
//列印響應的資料
NSLog(@"%@",dic);
[_textView performSelectorOnMainThread:@selector(setText:) withObject:[NSString stringWithFormat:@"%@", dic] waitUntilDone:YES];
}];
//開始任務
[dataTsk resume];
POST程式碼:
NSURL *url = [NSURL URLWithString:@"http://piao.163.com/m/cinema/list.html?app_id=1&mobileType=iPhone&ver=2.6&channel=appstore&deviceId=9E89CB6D-A62F-438C-8010-19278D46A8A6&apiVer=6&city=110000"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @"POST";
//如果60S不響應就退出
request.timeoutInterval = 60;
//設定請求體
NSData *bodyData =[@"cinema_id=1533" dataUsingEncoding:NSUTF8StringEncoding];
request.HTTPBody = bodyData;
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSString *jsonString = [NSString stringWithFormat:@"%@",dic];
//轉換型別
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
//列印狀態碼
NSLog(@"狀態設計:%li",httpResponse.statusCode);
//列印響應頭
NSDictionary *responseHeader = httpResponse.allHeaderFields;
NSLog(@"響應頭:%@",responseHeader);
}];
[dataTask resume]
下載任務:
NSURL *url = [NSURL URLWithString:@"http://dlsw.baidu.com/sw-search-sp/soft/bf/35013/Baidu_Setup_1959_2.2.0.1452_10000010.1449569847.exe"];
//設定Configs屬性
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
//這兒可以使用代理方法檢測下載任務
session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]];
downloadTask = [session downloadTaskWithURL:url];
[downloadTask resume];
上傳任務:
NSURL *url = [NSURL URLWithString:@"https://api.weibo.com/2/statuses/upload.json"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @"POST";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data;charset = utf-8;boundary=%@", Boundary];
[request setValue:contentType forHTTPHeaderField:@"Content-Type"];
NSString *path = [[NSBundle mainBundle] pathForResource:@"upload_pic" ofType:@"jpg"];
NSData *imageData = [NSData dataWithContentsOfFile:path];
//自定義的請求體方法
NSData *boadyData = [self bulidHTTPBodyData:imageData];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request fromData:boadyData completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
NSLog(@"error:%@", error);
NSLog(@"上傳圖片至微博成功:%@", response);
}];
[uploadTask resume];
相關文章
- 網路程式設計基礎-socket基礎程式設計
- 網路程式設計基礎程式設計
- JAVA網路程式設計基礎Java程式設計
- 網路程式設計基礎知識程式設計
- Java 基礎(十六)網路程式設計Java程式設計
- Socket網路程式設計基礎與實踐:建立高效的網路通訊程式設計
- 程式設計必備基礎 計算機組成原理+作業系統+計算機網路,計算機基礎——更適合程式設計師的程式設計必備基礎知識作業系統計算機網路程式設計師
- 雲端計算是網際網路+新基礎設施
- 程式設計基礎程式設計
- Java擴充-網路程式設計基礎Java程式設計
- 黑馬程式設計師_ios基礎總結1_IOS概述程式設計師iOS
- Socket程式設計基礎程式設計
- Go程式設計基礎Go程式設計
- Java程式設計基礎Java程式設計
- Shell程式設計-基礎程式設計
- C程式設計基礎C程式程式設計
- shell程式設計基礎程式設計
- Java 基礎(二十)網路框架設計 MyVolley (上)Java框架
- 柳大的Linux講義·基礎篇(4)網路程式設計基礎Linux程式設計
- Java網路程式設計快速上手(SE基礎)Java程式設計
- 【Python入門基礎】網路程式設計Python程式設計
- iOS10 UI設計基礎教程iOSUI
- C#網路應用程式設計基礎練習題與答案(1)C#程式設計
- 《java程式設計基礎》java的基礎知識(三)Java程式設計
- 計算機網路---基礎篇計算機網路
- Java 基礎02Java程式設計基礎Java程式設計
- 網際網路後端基礎設施後端
- 程式設計基礎知識程式設計
- shell程式設計基礎二程式設計
- 【程式設計基礎】輸出程式設計
- 【socket程式設計基礎模板】程式設計
- QML程式設計 基礎 小白程式設計
- JNI程式設計基礎(一)程式設計
- 【Java基礎】通用程式設計Java程式設計
- linux程式設計基礎Linux程式設計
- pl/sql程式設計基礎SQL程式設計
- python程式設計基礎Python程式設計
- Java網路程式設計基礎學習與整理Java程式設計