標籤:
在學習ios的過程中,停留在UI控制項很長時間,現在正在逐步的接觸當中!!!!!!在這個過程中,小編學到了一些關於網路編程知識,並且有感而發,在此分享一下:
關於網路請求的重要性我想不用多說了吧!!!對於移動用戶端來說,網路的重要性不言而喻,常見的網路請求有GET, POST,今天來看一下兩種網路請求的實現方式。
第一部分 小編的理解
一、兩種網路請求--POST請求與GET請求的異同(這裡小編只討論的是非同步連結)
GET的語義是擷取指定URL上的資源,將資料按照Variable = Value的形式,添加到action所指向的URL後面,並且兩者使用"?"串連,各個變數之間使用"&"串連。
POST的文法是指定資源“追加/添加”資源,將資料放在資料體上,按照變數和值相對應的方式,傳遞到action所指向的URL。
1. GET請求的介面會包含參數部分,參數會作為網址的一部分,伺服器位址與參數之間通過 ? 來間隔。POST請求會將伺服器位址與參數分開,請求介面中只有伺服器位址,而參數會作為請求的一部分,提交後台伺服器。
2. GET請求參數會出現在介面中,不安全;而POST請求相對安全,所有資料對使用者不可見。
3.GET傳輸的資料量小,主要受URL長度限制;而POST可大量傳輸資料,上傳檔案只能使用POST。
4.雖然GET請求和POST請求都可以用來請求和提交資料,但是一般的GET多用於從後台請求資料,POST多用於向後台提交資料。
二、 網路請求的步驟
1. 確定地址NSURL
2. 建立請求NSURLRequest
3. 建立並啟動串連NSURLConnection
等待網路處理~~~~
4. 通過代理方法處理網路請求
遵守協議:NSURLConnectionDataDelegate
三、 網路代理程式方法
1. 接收到伺服器的響應,伺服器要傳資料,用戶端做接收準備
2. 接收伺服器傳輸的資料,可能會多次執行
3. 接收資料完成,做後續處理
4. 伺服器請求失敗,原因很多(網路環境等等)
5. 向伺服器發送資料,此方法僅適用於POST,尤其上傳檔案
四、 GET方法
在NSURL中,指定參數(如果有,也可以不指定參數),例如:http://www.baidu.com
五、 POST方法
定義一個可變的URLMutableRequest
1) 時間長度
[request setTimeoutInterval:2.0f];
2) 請求方式(預設是GET)
[request setHTTPMethod:@"POST"];
3) 資料體
NSData *body = [string dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];
六、 同步方法——必須要某個網路請求完成後,才能後續執行,例如網銀登入
看到方法參數中包含__autoreleasing字樣,在定義的對象名前面加上“&”
NSURLResponse *response = nil;
NSError *error = nil;
// 同步操作沒有完成,後面的代碼不會執行
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
1> 接收到資料,表示工作正常
2> 沒有接收到資料,但是error為nil,表示接收到空資料
通常伺服器沒有對該請求做任何響應
3> error不為空白,表示請求出錯
七、 非同步方法呼叫
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *reponse, NSData *data, NSError *error) {
// 請求完成後的處理
}];
非同步方法呼叫不用等待網路請求結束
第二部分 小編的部分demo
1 // 1. 確定地址NSURL 2 NSString *urlString = [NSString stringWithFormat:@"http://XXXXXXX.php?XXXX=%@&XXXX=%@", XXX, XXX; 3 urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 4 NSURL *url = [NSURL URLWithString:urlString]; 5 // 2. 建立請求NSURLRequest 6 NSURLRequest *request = [NSURLRequest requestWithURL:url]; 7 // 3. 建立並啟動串連NSURLConnection 8 NSURLConnection *conn = [NSURLConnection connectionWithRequest:request delegate:self]; 9 // 啟動串連,非同步串連請求10 [conn start];11 // 伺服器通知準備,準備中轉資料12 self.serverData = [NSMutableData data];
GET方法
1 // 1. 確定地址NSURL 2 NSString *urlString = [NSString stringWithFormat:@"http://XXXXX.php"]; 3 NSURL *url = [NSURL URLWithString:urlString]; 4 // 2. 建立請求NSURLRequest(POST) 5 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 6 // 1) 請求方式 7 [request setHTTPMethod:@"POST"]; 8 // 2) 資料體 9 // 因為dataUsingEncoding已經實現了轉碼10 NSString *bodyStr = [NSString stringWithFormat:@"username=%@&password=%@", userName, pwd];11 NSData *body = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];12 [request setHTTPBody:body];13 // 3. 建立並啟動串連NSURLConnection14 NSURLConnection *conn = [NSURLConnection connectionWithRequest:request delegate:self];15 // 啟動串連,非同步串連請求16 [conn start];17 // 伺服器通知準備,準備中轉資料18 self.serverData = [NSMutableData data];
POST方法
1 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{}2 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{}3 - (void)connectionDidFinishLoading:(NSURLConnection *)connection{}4 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{}5 - (void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite6 {}網路代理程式方法
小編能力有限,希望大牛來指點,不勝感激!!!!!!
ios網路編程(入門層級)-- 基礎知識