zoukankan      html  css  js  c++  java
  • ios swift 打造自己的http请求工具

    在ios开发中,网络请求是不可以少的,说到网络请求可能用的最多的就是第三方的比人比较有名的AFNetworking、Alamofire等,原生的用的少。今天就用ios提供的原生方法来打造属于自己的一个网络请求工具吧。大神的成长之路,现在就开始起航。

    第一步:先建一个类比如叫 Http 如下:

     //定义请求类型

    enum HttpMethod {

        case GET,

                POST

    }

    //在http中定义类方法来做请求,方便使用

    class Http {

        class func request(method:HttpMethod, url:String,params:[String:Any]=[:],complete: @escaping(_result:String)->Void,error:@escaping(_error:Error?)->Void){

            var url = url

            //处理参数为了方便这里抽取里一个方法来处理参数

        let param =self.parserParams(params: params)

            //设置get请求参数

            ifmethod == .GET&&param != ""{

               if url.contains("?"){

                url.append("&(param)")

               }else{

               url.append("?(param)")

                 }

              

            }

         // 注意这里需要将含有中文的参数进行编码处理,否则创建URL 对象就会返回nil。

           url = url.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!

            let_url =URL(string: url)!

            let request =NSMutableURLRequest(url: _url)

         //设置超时时间

            request.timeoutInterval=50

           //设置请求方式

            request.httpMethod= method == .GET?"GET":"POST"

             //设置post请求参数

            if method == .POST&& param != ""{

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

            }

            let session =URLSession.shared

            let httpTask = session.dataTask(with: request as URLRequest) { (data,response ,err ) in

                //在主线程中回调方便在界面处理数据逻辑

                OperationQueue.main.addOperation {

                if err !=nil{

                //错误回调

                    error(err)

                  return

                }

              //请求成功将结果返回

                complete(String(data: data!, encoding:String.Encoding.utf8)!)

               }

            }

            //启动任务

            httpTask.resume()

        }

        //将字典转换成网络请求的参数字符串

        private class func parserParams(params:[String:Any])->String{

            var newStr=""

            for param in params{

             newStr.append("(param.key)=(param.value)&")

            }

              return newStr

        }

    }

    第二步开始测试:在viewcontroller中调用,

    class ViewController:UIViewController{

        override func viewDidLoad() {

            super.viewDidLoad()

             let url = "http://api.budejie.com/api/api_open.php"

            Http.request(method: .GET, url: url, params: ["a":"list","c":"data","type":1], complete: {r in

                print("请求结果:",r)

            }, error:{error in

                print("请求出错了:",error.debugDescription)

            })

    至此就这个简单的http请求工具就写好了,是不是很简单呢? 如果觉得可以记得关注我哦,如果有什么问题欢迎留言!

    简书地址: Code人生 欢迎关注

  • 相关阅读:
    计算机 ------- 网络基础
    设计模式------单例模式
    svn 客户端查看用户名和密码
    Docker:DockerFile(DockerFile解析)
    Docker:容器数据卷(命令方式、DockerFile方式)
    SpringBoot再总结
    Docker:镜像(镜像原理)
    Docker:Docker命令(帮助命令、镜像命令、容器命令)
    Docker(Docker的概念与安装)
    ZooKeeper:zookeeper的常用命令(节点的新增、更新、删除)
  • 原文地址:https://www.cnblogs.com/zzjbk/p/8525525.html
Copyright © 2011-2022 走看看