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

博客园地址:  猿哥爱码

目录
相关文章
|
19天前
|
JSON API 开发者
Python网络编程新纪元:urllib与requests库,让你的HTTP请求无所不能
【7月更文挑战第31天】互联网的发展使网络编程成为软件开发的关键部分. Python以简洁、功能强大著称, 在此领域尤显突出. `urllib`作为标准库, 自Python初期便支持URL处理, 如读取URL (`urllib.request`) 和解析 (`urllib.parse`). 尽管API底层, 但奠定了网络编程基础.
34 4
|
3天前
|
JSON API 数据格式
Python网络编程:HTTP请求(requests模块)
在现代编程中,HTTP请求几乎无处不在。无论是数据抓取、API调用还是与远程服务器进行交互,HTTP请求都是不可或缺的一部分。在Python中,requests模块被广泛认为是发送HTTP请求的最简便和强大的工具之一。本文将详细介绍requests模块的功能,并通过一个综合示例展示其应用。
|
8天前
|
Python
HTTP 请求
【8月更文挑战第11天】
24 12
|
12天前
|
存储 物联网 测试技术
Golang中的HTTP请求凝聚器
Golang中的HTTP请求凝聚器
|
5天前
|
数据采集 API 开发者
.NET 8新特性:使用ConfigurePrimaryHttpMessageHandler定制HTTP请求
在.NET 8中,通过`ConfigurePrimaryHttpMessageHandler`方法,开发者能更精细地控制HTTP请求,这对于构建高效爬虫尤为重要。此特性支持定制代理IP、管理Cookie与User-Agent,结合多线程技术,有效应对网络限制及提高数据采集效率。示例代码展示了如何设置代理服务器、模拟用户行为及并发请求,从而在遵守网站规则的同时,实现快速稳定的数据抓取。
.NET 8新特性:使用ConfigurePrimaryHttpMessageHandler定制HTTP请求
|
7天前
|
缓存 数据安全/隐私保护 UED
代理服务器在HTTP请求中的应用:Ruby实例
代理服务器在HTTP请求中的应用:Ruby实例
|
7天前
|
开发者 Python
深入解析Python `requests`库源码,揭开HTTP请求的神秘面纱!
深入解析Python `requests`库源码,揭开HTTP请求的神秘面纱!
20 1
|
7天前
Ueditor——请求后台配置项http错误,上传功能将不能正常使用
Ueditor——请求后台配置项http错误,上传功能将不能正常使用
15 0
Ueditor——请求后台配置项http错误,上传功能将不能正常使用
|
7天前
|
数据采集 开发框架 .NET
HttpClient在ASP.NET Core中的最佳实践:实现高效的HTTP请求
在现代Web开发中,高效可靠的HTTP请求对应用性能至关重要。ASP.NET Core提供的`HttpClient`是进行这类请求的强大工具。本文探讨其最佳实践,包括全局复用`HttpClient`实例以避免性能问题,通过依赖注入配置预设头部信息;使用代理IP以防IP被限制;设置合理的`User-Agent`和`Cookie`来模拟真实用户行为,提高请求成功率。通过这些策略,可显著增强爬虫或应用的稳定性和效率。
HttpClient在ASP.NET Core中的最佳实践:实现高效的HTTP请求
|
20天前
|
存储 运维 Java
函数计算产品使用问题之如何使用Python的requests库向HTTP服务器发送GET请求
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。