swift开发网络篇—利用NSURLConnection GET请求和POST请求

时间:2023-03-09 03:27:14
swift开发网络篇—利用NSURLConnection GET请求和POST请求

一、GET请求和POST请求简单说明

@IBOutlet weakvar 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

}