Swift - 原生GET&POST请求的用法

来源:互联网 发布:免费sql数据库空间 编辑:程序博客网 时间:2024/06/10 02:34

只要属于移动开发的范畴,网络请求一定是其中的重头戏,Object-C的网络请求大家都不陌生,不过感觉很熟悉的貌似也不多,因为第三方的库用起来更加方便,比如我们所熟知的AFNetworking,在Swift中,也存在一些封装的比较好的网络请求库,不过我今天说的不是那种第三方的,而是原生的请求方法,下面看代码:

import UIKitclass ViewController: UIViewController {    override func viewDidLoad() {        super.viewDidLoad()        // Do any additional setup after loading the view, typically from a nib.        let getBtn = UIButton(type: .System)        getBtn.frame = CGRectMake(50, 100, 100, 100)        getBtn.setTitle("GET", forState: .Normal)        getBtn.setTitleColor(UIColor.blackColor(), forState: .Normal)        getBtn.addTarget(self, action: #selector(self.GETACtion), forControlEvents: .TouchUpInside)        self.view.addSubview(getBtn)        let postBtn = UIButton(type: .System)        postBtn.frame = CGRectMake(self.view.frame.size.width - 150, 100, 100, 100)        postBtn.setTitle("POST", forState: .Normal)        postBtn.setTitleColor(UIColor.blackColor(), forState: .Normal)        postBtn.addTarget(self, action: #selector(self.POSTACtion), forControlEvents: .TouchUpInside)        self.view.addSubview(postBtn)    }    /**     往下看你会发现其实GET和POST差不多是一样的,一般我们认为GET方法是不用上传参数的,所有的参数都在请求链接中或者索性直接没参数,在这里GET方法中你看到参数是可以放在请求体中的,而大多数搜索到的区别都认为GET的参数在请求链接上,这种说法是不对的,GET参数完全可以放在请求体中,并不是因为GET连接长度有限制,起到限制的不是http协议,而是服务器和浏览器,所以乍一看这里GET和POST几乎一样,但它们在HTTPMethod是有着本质区别的,不再说本质区别,有兴趣的自己了解。     另外需要注意的是,这里的字典,如果你想封装的话一定要考虑字典为空的情况,如果为空,请不要使用         request.HTTPMethod = "XXX",否则会报错,所以,如你所见,当字典为空时,POST和GET没有任何区别,但至于它属于什么方法,我并没有从网上找到答案,留待大家补充     */    /**     GET请求     */    func GETACtion() {        //请求URL        let url:NSURL! = NSURL(string: "http://iappfree.candou.com:8080/free/applications/limited")        let request:NSMutableURLRequest = NSMutableURLRequest(URL: url)        let list  = NSMutableArray()        var paramDic = [String: String]()        if paramDic.count > 0 {            //设置为GET请求            request.HTTPMethod = "GET"            //拆分字典,subDic是其中一项,将key与value变成字符串            for subDic in paramDic {                let tmpStr = "\(subDic.0)=\(subDic.1)"                list.addObject(tmpStr)            }            //用&拼接变成字符串的字典各项            let paramStr = list.componentsJoinedByString("&")            //UTF8转码,防止汉字符号引起的非法网址            let paraData = paramStr.dataUsingEncoding(NSUTF8StringEncoding)            //设置请求体            request.HTTPBody = paraData        }        //默认session配置        let config = NSURLSessionConfiguration.defaultSessionConfiguration()        let session = NSURLSession(configuration: config)        //发起请求        let dataTask = session.dataTaskWithRequest(request) { (data, response, error) in            //            let str:String! = String(data: data!, encoding: NSUTF8StringEncoding)            //            print("str:\(str)")            //转Json            let jsonData:NSDictionary = try! NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as! NSDictionary            print(jsonData)        }        //请求开始        dataTask.resume()    }    /**     POST请求     */    func POSTACtion() {        //请求URL        let url:NSURL! = NSURL(string: "http://iappfree.candou.com:8080/free/applications/limited")        let request:NSMutableURLRequest = NSMutableURLRequest(URL: url)        let list  = NSMutableArray()        var paramDic = [String: String]()        if paramDic.count > 0 {            //设置为POST请求            request.HTTPMethod = "POST"            //拆分字典,subDic是其中一项,将key与value变成字符串            for subDic in paramDic {                let tmpStr = "\(subDic.0)=\(subDic.1)"                list.addObject(tmpStr)            }            //用&拼接变成字符串的字典各项            let paramStr = list.componentsJoinedByString("&")            //UTF8转码,防止汉字符号引起的非法网址            let paraData = paramStr.dataUsingEncoding(NSUTF8StringEncoding)            //设置请求体            request.HTTPBody = paraData        }        //默认session配置        let config = NSURLSessionConfiguration.defaultSessionConfiguration()        let session = NSURLSession(configuration: config)        //发起请求        let dataTask = session.dataTaskWithRequest(request) { (data, response, error) in            //            let str:String! = String(data: data!, encoding: NSUTF8StringEncoding)            //            print("str:\(str)")            //转Json            let jsonData:NSDictionary = try! NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as! NSDictionary            print(jsonData)        }        //请求开始        dataTask.resume()    }    override func didReceiveMemoryWarning() {        super.didReceiveMemoryWarning()        // Dispose of any resources that can be recreated.    }}

下载地址

1 0
原创粉丝点击