iOS網路開發基礎--傳送HTTP請求
一、一個HTTP請求的基本要素
1.請求URL:客戶端通過哪個路徑找到伺服器
2.請求引數:客戶端傳送給伺服器的資料
- 如登入時需要傳送的使用者名稱和密碼
3.返回結果:伺服器返回給客戶端的資料
- 一般是JSON資料或者XML資料
二、基本的HTTP請求的步驟(移動客戶端)
1.拼接"請求URL" + "?" + "請求引數"
- 請求引數的格式:引數名=引數值
- 多個請求引數之間用&隔開:引數名1=引數值1&引數名2=引數值2
2.傳送請求
3.解析伺服器返回的資料
- JSON解析
- XML解析
三、HTTP的通訊過程
1.請求
1> 請求行 :
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];