ios swift 打造自己的http请求工具

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

在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请求参数

         if method == .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请求工具就写好了,是不是很简单呢? 如果觉得可以记得关注我哦,如果有什么问题欢迎留言!

博客园地址:  猿哥爱码

目录
相关文章
|
11天前
|
安全 数据安全/隐私保护 Android开发
【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
140 75
|
5月前
|
Swift iOS开发
iOS Swift使用Alamofire请求本地服务器报错-1002
iOS Swift使用Alamofire请求本地服务器报错-1002
138 1
|
2月前
|
安全 API 网络安全
使用OkHttp进行HTTPS请求的Kotlin实现
使用OkHttp进行HTTPS请求的Kotlin实现
|
3月前
|
安全 网络安全 数据安全/隐私保护
HTTPS 请求中的证书验证详解(Python版)
HTTPS 请求中的证书验证详解(Python版)
275 0
|
4月前
|
iOS开发 Python
6-8|如何使用Python语言开发IOS混淆工具
6-8|如何使用Python语言开发IOS混淆工具
|
5月前
|
Web App开发 存储
常见抓包工具配置抓取HTTPS
常见抓包工具配置抓取HTTPS
|
5月前
|
XML 安全 Android开发
Flutter配置Android和IOS允许http访问
Flutter配置Android和IOS允许http访问
184 3
|
6月前
|
Java Android开发 iOS开发
探索安卓与iOS开发的差异性:平台、工具和用户体验的对比分析
【7月更文挑战第30天】在移动应用开发的广阔天地中,安卓和iOS两大平台各自占据着不可忽视的地位。本文将深入探讨这两大平台在开发环境、工具选择以及最终用户体验上的根本差异,并分析这些差异如何影响开发者的策略和用户的偏好。通过比较安卓的开放性与iOS的封闭性,我们将揭示不同平台下的开发哲学及其对生态系统的影响。
55 4
|
6月前
|
安全 Java 网络安全
RestTemplate进行https请求时适配信任证书
RestTemplate进行https请求时适配信任证书
173 3
|
5月前
|
JavaScript 前端开发 Java
【Azure 环境】各种语言版本或命令,发送HTTP/HTTPS的请求合集
【Azure 环境】各种语言版本或命令,发送HTTP/HTTPS的请求合集

热门文章

最新文章