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

ios swift 打造自己的http请求工具的更多相关文章

  1. iOS swift项目IM实现,从长连接到数据流解析分析之Socket

    iOS  swift项目IM实现,从长连接到底层数据解析分析之Socket 一:项目简介:  去年开始接手了一个国企移动项目,项目的需求是实现IM即时通讯功能. * 一期版本功能包括了:       ...

  2. iOS开发一个制作Live Photo的工具

    代码地址如下:http://www.demodashi.com/demo/13339.html 1.livePhoto简介 livePhoto是iOS 9.0 之后系统相机提供的拍摄动态照片的功能,但 ...

  3. WebUtils-网络请求工具类

    网络请求工具类,大幅代码借鉴aplipay. using System; using System.Collections.Generic; using System.IO; using System ...

  4. Http、Https请求工具类

    最近在做微信开发,使用http调用第三方服务API,有些是需要https协议,通过资料和自己编码,写了个支持http和https的工具类,经验证可用,现贴出来保留,也供需要的人使用(有不足的地方,也请 ...

  5. 微信https请求工具类

    工作中用到的微信https请求工具类. package com.gxgrh.wechat.tools; import com.gxgrh.wechat.wechatapi.service.System ...

  6. HTTP请求工具类

    HTTP请求工具类,适用于微信服务器请求,可以自测 代码; /// <summary> /// HTTP请求工具类 /// </summary> public class Ht ...

  7. http模拟请求工具

    http模拟请求工具: postman(chrome应用) Request Maker(chrome插件) Request Maker(网站:http://www.requestmaker.com/) ...

  8. 基于Android Volley的网络请求工具

    基于Android Volley的网络请求工具. 一.说明 AndroidVolley,Android Volley核心库及扩展工程.AndroidVolleySample,网络请求工具示例工程.Re ...

  9. iOS Get方式带中文不能请求网络

    今天发现一个蛋疼的问题,使用ASIHTTPRequest Get方式请求数据时候带中文,iOS客户端不能正确进行网络请求. NSURL *url = [NSURL URLWithString:@htt ...

随机推荐

  1. spring之:XmlWebApplicationContext作为Spring Web应用的IoC容器,实例化和加载Bean的过程

    它既是 DispatcherServlet 的 (WebApplicationContext)默认策略,又是 ContextLoaderListener 创建 root WebApplicationC ...

  2. altium designer 中器件原理图库中,将一个器件分成几部分是如何操作的?就是如何用part表示?

    在SCH Library的Components中选中你要添加part的器件,tools菜单--new part即可

  3. win 7命令行大全

    一.win+(X) 其中win不会不知道吧,X为代码! Win+L 锁定当前用户. Win+E 资源管理器. Win+R 运行. Win+G (Gadgets)顺序切换边栏小工具. Win+U    ...

  4. Python函数(一)-return返回值

    定义一个函数可以在最后加上return返回值,方便查看函数是否运行完成和返回函数的值 # -*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR&qu ...

  5. 【ZooKeeper怎么玩】之一:为什么需要ZK

    博客已经搬家,见[ZooKeeper怎么玩]之一:为什么需要ZK 学习新东西首先需要搞清楚为什么学它,这是符合我们的一个认知过程.<!--more-->#ZooKeeper是什么ZooKe ...

  6. Django 学习之---静态文件处理详解

    前言: 1.静态文件是指 网站中的 js, css, 图片,视频等文件 2.静态文件放在对应的 app 下的 static 文件夹中 或者 STATICFILES_DIRS 中的文件夹中. 当 DEB ...

  7. 【Android 多媒体应用】使用 MediaPlayer 播放视频

    1.MainActivity.java import android.media.AudioManager; import android.media.MediaPlayer; import andr ...

  8. Linux split命令实例

    曾经是否想要把一个大文件分割成多个小文件?比如一个5gb日志文件,我们需要把它分成多个小文件,这样我们才有可能使用普通的文本编辑器读取它.有时我们需要传输20gb的大文件到另一台服务器,这就需要我们把 ...

  9. 关于web.xml中的<welcome-file-list>中的默认首页文件

    先看我的配置文件: <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome ...

  10. Linux kdb命令

    一.简介 Linux 内核调试器(KDB)允许您调试 Linux 内核.这个恰如其名的工具实质上是内核代码的补丁,它允许高手访问内核内存和数据结构.KDB 的主要优点之一就是它不需要用另一台机器进行调 ...