• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

swift4.0中http连接(据于xcode9.3URLSession)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
NSURLSession是NSURLConnection的替代者,在2013年苹果全球开发者大会上(WWDC2013)随iOS7一起发布的,是对NSURLConnection进行了重构优化后的新的网络接口。从iOS9开始,NSURLConnection中发送请求的两个方法已经过期(同步请求,异步请求),初始化网络连接的方法也被设置为过期,系统不再推荐使用,建议使用NSURLSession发送网络请求。

 

import UIKit

 

public class HttpUtils{

    

    //get 请求

    func getRequest(path:String) -> String {

        var resStr:String?

        //创建URL对象

        let urlString:String = path

        let url = URL(string:urlString)

        //创建请求对象

        let request = URLRequest(url: url!)

        

        let session = URLSession.shared

        

        let semaphore = DispatchSemaphore(value: 0)

        

        let dataTask = session.dataTask(with: request,

                                        completionHandler: {(data, response, error) -> Void in

                                            if error != nil{

                                                print(error!)

                                            }else{

                                                let str = String(data: data!, encoding: String.Encoding.utf8)

                                                resStr = str!

                                            }

                                            

                                            semaphore.signal()

        }) as URLSessionTask

        

        //使用resume方法启动任务

        dataTask.resume()

        

        _ = semaphore.wait(timeout: DispatchTime.distantFuture)

        print("数据加载完毕!")

        print(resStr!)

        return resStr!

    }

    

    //post 请求

    func postRequest(path:String,paras:String) -> String {

        var resStr:String?

        //创建URL对象

        let urlString:String = path

        let url = URL(string:urlString)

        //创建请求对象

        var request = URLRequest(url: url!)

        request.httpMethod = "POST"

        request.httpBody = paras.data(using: .utf8)

        

        let session = URLSession.shared

        

        let semaphore = DispatchSemaphore(value: 0)

        

        let dataTask = session.dataTask(with: request,

                                        completionHandler: {(data, response, error) -> Void in

                                            if error != nil{

                                                print(error!)

                                            }else{

                                                let str = String(data: data!, encoding: String.Encoding.utf8)

                                                resStr = str!

                                            }

                                            

                                            semaphore.signal()

        }) as URLSessionTask

        

        //使用resume方法启动任务

        dataTask.resume()

        

        _ = semaphore.wait(timeout: DispatchTime.distantFuture)

        print("请求完毕!")

        return resStr!

    }

    

}

 

如果出现 提示"The resource could not be loaded because the App Transport Security policy requires the use of a secure connection":

 

原因:iOS9以后,苹果把原http协议改成了https协议,所以不能直接在http协议下GET/POST

 

解决办法:

1.直接编辑工程文件下的Info.plist文件。文件入下:

 

2.加入如下代码:

<key>NSAppTransportSecurity</key>  
  <dict>  
    <key>NSAllowsArbitraryLoads</key>
    <true/>   </dict>

3.重启xcode

ps:可以通过控制台打开info.plist进行编辑

 


 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
swift3.0调用相册发布时间:2022-07-13
下一篇:
在Swift项目中使用cocoaPods导入第三方OC库发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap