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&¶m != ""{
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请求工具的更多相关文章
- iOS swift项目IM实现,从长连接到数据流解析分析之Socket
iOS swift项目IM实现,从长连接到底层数据解析分析之Socket 一:项目简介: 去年开始接手了一个国企移动项目,项目的需求是实现IM即时通讯功能. * 一期版本功能包括了: ...
- iOS开发一个制作Live Photo的工具
代码地址如下:http://www.demodashi.com/demo/13339.html 1.livePhoto简介 livePhoto是iOS 9.0 之后系统相机提供的拍摄动态照片的功能,但 ...
- WebUtils-网络请求工具类
网络请求工具类,大幅代码借鉴aplipay. using System; using System.Collections.Generic; using System.IO; using System ...
- Http、Https请求工具类
最近在做微信开发,使用http调用第三方服务API,有些是需要https协议,通过资料和自己编码,写了个支持http和https的工具类,经验证可用,现贴出来保留,也供需要的人使用(有不足的地方,也请 ...
- 微信https请求工具类
工作中用到的微信https请求工具类. package com.gxgrh.wechat.tools; import com.gxgrh.wechat.wechatapi.service.System ...
- HTTP请求工具类
HTTP请求工具类,适用于微信服务器请求,可以自测 代码; /// <summary> /// HTTP请求工具类 /// </summary> public class Ht ...
- http模拟请求工具
http模拟请求工具: postman(chrome应用) Request Maker(chrome插件) Request Maker(网站:http://www.requestmaker.com/) ...
- 基于Android Volley的网络请求工具
基于Android Volley的网络请求工具. 一.说明 AndroidVolley,Android Volley核心库及扩展工程.AndroidVolleySample,网络请求工具示例工程.Re ...
- iOS Get方式带中文不能请求网络
今天发现一个蛋疼的问题,使用ASIHTTPRequest Get方式请求数据时候带中文,iOS客户端不能正确进行网络请求. NSURL *url = [NSURL URLWithString:@htt ...
随机推荐
- 第十四届华中科技大学程序设计竞赛决赛同步赛 F Beautiful Land(01背包,背包体积超大时)
链接:https://www.nowcoder.com/acm/contest/119/F来源:牛客网 Beautiful Land 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1 ...
- dijstra+输出路径总结
#include<iostream> #include<math.h> #include<memory.h> using namespace std; #defin ...
- Python 下载图片的几种方法
import osos.makedirs('./image/', exist_ok=True)IMAGE_URL = "http://image.nationalgeographic.com ...
- mybatis如何防止sql注入(1)
sql注入大家都不陌生,是一种常见的攻击方式,攻击者在界面的表单信息或url上输入一些奇怪的sql片段,例如“or ‘1’=‘1’”这样的语句,有可能入侵参数校验不足的应用程序.所以在我们的应用中需要 ...
- Celery-4.1 用户指南: Signals (信号)
基础 有多种类型的事件可以触发信号,你可以连接到这些信号,使得在他们触发的时候执行操作. 连接到 after_task_publish 信号的示例: from celery.signals impor ...
- 升级 AngularJS 至 Angular
Victor Savkin 大神撰写了一系列文章详细介绍如何升级 AngularJS 应用: NgUpgrade in Depth Upgrade Shell Two Approaches to Up ...
- 2016.2.13 (年初六) oracle两张表update方法
A表customers和B表tmp_cust_city有3个相同字段, customer_id,city_name,customer_type 现要根据b表更新a表 更新一个字段情况: update ...
- Oracle、SqlServer——临时表
一.oracle 1.概述: oracle数据库的临时表的特点: 临时表默认保存在TEMP中: 表结构一直存在,直到删除:即创建一次,永久使用: 不支持主外键. 可以索引临时表和在临时表基础上建立视图 ...
- leetcode443
使用两个数组分别记录字符和对应的数字,然后清除原来的vector,重新向里面添加元素.注意判断1个字符时,不将'1'加入vector. int compress(vector<char>& ...
- 微信开发准备(二)--springmvc+mybatis项目结构的搭建
转自:http://www.cuiyongzhi.com/post/34.html 前面一篇有说道如何在MyEclipse中搭建maven项目,这里将继续介绍如何在搭建好的基础maven项目中引入我们 ...