swift開發網路篇—利用NSURLConnection GET請求和POST請求
一、GET請求和POST請求簡單說明
@IBOutletweakvar userName:UITextField!
@IBOutletweakvar userPwd:UITextField!
@IBOutletweakvar logonResult:UILabel!
/* 建立Get請求 */
func GetRequest()
{
//(1)設定請求路徑
var urlStr:NSString =String(format:"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.userName
var url:NSURL =NSURL(string: urlStrasString)!
//(2) 建立請求物件
var request:NSURLRequest =NSURLRequest(URL: url)
//(3) 傳送請求
NSURLConnection.sendAsynchronousRequest(request, queue:NSOperationQueue()) { (res, data, error)in
//伺服器返回:請求方式 = GET,返回資料格式 = JSON,使用者名稱 = 123,密碼 = 1233
let str =NSString(data: data!, encoding:NSUTF8StringEncoding)
print(str)
}
}
/* 建立Post請求 */
func PostRequest()
{
//(1)設定請求路徑
var url:NSURL =NSURL(string:"http://192.168.1.53:8080/MJServer/login")!//不需要傳遞引數
//(2) 建立請求物件
var request:NSMutableURLRequest =NSMutableURLRequest(URL: url)
request.timeoutInterval =5.0//設定請求超時為5秒
request.HTTPMethod ="POST"//設定請求方法
//設定請求體
var param:NSString =NSString(format:"username=%@&pwd=%@",self.userName.text!,self.userPwd.text!)
//把拼接後的字串轉換為data,設定請求體
request.HTTPBody = param.dataUsingEncoding(NSUTF8StringEncoding)
//(3) 傳送請求
NSURLConnection.sendAsynchronousRequest(request, queue:NSOperationQueue()) { (res, data, error)in
//伺服器返回:請求方式 = POST,返回資料格式 = JSON,使用者名稱 = 123,密碼 = 123
let str =NSString(data: data!, encoding:NSUTF8StringEncoding)
print(str)
}
}
二、比較
建議:提交使用者的隱私資料一定要使用POST請求
相對POST請求而言,GET請求的所有引數都直接暴露在URL中,請求的URL一般會記錄在伺服器的訪問日誌中,而伺服器的訪問日誌是黑客攻擊的重點物件之一. 使用者的隱私資料如登入密碼,銀行賬號等。
三、使用
/*1.通過請求頭告訴伺服器,客戶端的型別(可以通過修改,欺騙伺服器)*/
func HeadRequest()
{
//(1)設定請求路徑
var url:NSURL =NSURL(string:"http://192.168.1.53:8080/MJServer/login")!//不需要傳遞引數
//(2) 建立請求物件
var request:NSMutableURLRequest =NSMutableURLRequest(URL: url) //預設為get請求
request.timeoutInterval =5.0//設定請求超時為5秒
request.HTTPMethod ="POST"//設定請求方法
//設定請求體
var param:NSString =NSString(format:"username=%@&pwd=%@",self.userName.text!,self.userPwd.text!)
//把拼接後的字串轉換為data,設定請求體
request.HTTPBody = param.dataUsingEncoding(NSUTF8StringEncoding)
//客戶端型別,只能寫英文
request.setValue("ios+android", forHTTPHeaderField:"User-Agent")
//(3) 傳送請求
NSURLConnection.sendAsynchronousRequest(request, queue:NSOperationQueue()) { (res, data, error)in
//伺服器返回:請求方式 = POST,返回資料格式 = JSON,使用者名稱 = 123,密碼 = 123
let str =NSString(data: data!, encoding:NSUTF8StringEncoding)
print(str)
}
}
/* 2.加強對中文的處理 */
//問題:URL不允許寫中文
//在GET請求中,相關程式碼段打斷點以驗證。
//在字串的拼接引數中,使用者名稱使用“張三”.
/* 建立Get請求 */
//(1)設定請求路徑
var urlStr:NSString =String(format:"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.userName.text!,self.userPwd.text!)
// urlStr 的使用者名稱使用“張三” ,轉換成URL之後整個變成了空值。
//提示:URL裡面不能包含中文。
//解決:進行轉碼
//使用者名稱為中文時,進行Get請求要轉碼
func GetRequestTranscoding()
{
//(1)設定請求路徑
var urlStr:NSString =String(format:"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.userName.text!,self.userPwd.text!)
//轉碼
urlStr = urlStr.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!
var url:NSURL =NSURL(string: urlStrasString)!
//建立請求物件
var request:NSURLRequest =NSURLRequest(URL: url)
//伺服器返回:請求方式 = GET,返回資料格式 = JSON,使用者名稱 =張三,密碼 = hhh
}