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人生 欢迎关注

  • 相关阅读:
    Javal连载4-注释&class与public class区别
    HTML连载21-序选择器上
    Python连载21-collections模块
    Java连载3-编译与运行阶段详解&JRE,JDK,JVM关系
    HTML连载20-并集选择器&兄弟选择器
    Python连载20-偏函数&zip函数&enumerate函数
    Java连载2-Java特性
    HTML连载19-子元素选择器&交集选择器
    [刷题] PTA 7-58 求整数序列中出现次数最多的数
    [刷题] PTA 7-56 找鞍点
  • 原文地址:https://www.cnblogs.com/zzjbk/p/8525525.html
Copyright © 2011-2022 走看看