1. 程式人生 > >iOS網路開發基礎--傳送HTTP請求

iOS網路開發基礎--傳送HTTP請求

一、一個HTTP請求的基本要素

1.請求URL:客戶端通過哪個路徑找到伺服器

2.請求引數:客戶端傳送給伺服器的資料

  • 如登入時需要傳送的使用者名稱和密碼

3.返回結果:伺服器返回給客戶端的資料

  • 一般是JSON資料或者XML資料

二、基本的HTTP請求的步驟(移動客戶端)

1.拼接"請求URL" + "?" + "請求引數"

  • 請求引數的格式:引數名=引數值
  • 多個請求引數之間用&隔開:引數名1=引數值1&引數名2=引數值2

2.傳送請求

3.解析伺服器返回的資料

  • JSON解析
  • XML解析

三、HTTP的通訊過程

1.請求

1> 請求行 :

請求方法、請求路徑、HTTP協議的版本

GET /MJServer/resources/images/1.jpg HTTP/1.1

2> 請求頭 : 客戶端的一些描述資訊

  • User-Agent : 客戶端的環境(軟體環境)

3> 請求體 : POST請求才有這個東西

  • 請求引數,發給伺服器的資料

2.響應

1> 狀態行(響應行): HTTP協議的版本、響應狀態碼、響應狀態描述

HTTP/1.1 200 OK

2> 響應頭:伺服器的一些描述資訊

  • Content-Type : 伺服器返回給客戶端的內容型別
  • Content-Length : 伺服器返回給客戶端的內容的長度(比如檔案的大小)

3> 實體內容(響應體)

  • 伺服器返回給客戶端具體的資料,比如檔案資料

四、HTTP的請求方法

1.GET

1> 特點

  • 所有請求引數都拼接在url後面

2> 缺點

  • url中暴露了所有的請求資料,不太安全
  • url的長度有限制,不能傳送太多的引數

3> 使用場合

  • 如果僅僅是向伺服器索要資料,一般用GET請求

4> 如何傳送一個GET請求

  • 預設就是GET請求

// 1.URL

NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];

// 2.請求

NSURLRequest *request = [NSURLRequest requestWithURL:url];

// 3.傳送請求

[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

}];

2.POST

1> 特點

  • 把所有請求引數放在請求體(HTTPBody)中
  • 理論上講,發給伺服器的資料的大小是沒有限制

2> 使用場合

  • 除開向伺服器索要資料以外的請求,都可以用POST請求
  • 如果發給伺服器的資料是一些隱私、敏感的資料,絕對要用POST請求

3> 如何傳送一個POST請求

// 1.建立一個URL 請求路徑

NSURL *url = [NSURL URLWithString:@"http://xxxxx"];

// 2.建立一個請求

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

// 設定請求方法

request.HTTPMethod = @"POST";

// 設定請求體 : 請求引數

NSString *param = [NSString stringWithFormat:@"username=%@&pwd=%@", usernameText, pwdText];

// NSString --> NSData

request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding];

五、NSMutableURLRequest的常用方法

1.設定超時

request.timeoutInterval = 5;

// NSURLRequest是不能設定超時的,因為這個物件是不可變的

六、URL轉碼

1.URL中不能包含中文,得對中文進行轉碼(加上一堆的%)

NSString *urlStr = [NSString stringWithFormat:@"http://localhost/login?username=lisa&pwd=123"];

urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];