1. 程式人生 > >swift開發網路篇—利用NSURLConnection GET請求和POST請求

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

.text!,self.userPwd.text!)

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) 

//預設為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)

//(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

    }