Net 0.2.2

Net 0.2.2

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最后发布2015年5月
SPM支持 SPM

nghialv 维护。




Net 0.2.2

Net

Net 是一个用 Swift 编写的 HttpRequest 包装器

特性

  • [x] GET、POST、PUT、DELETE 方法
  • [x] 强大的请求参数:嵌套参数、数字、字符串、字典、数组、图片、数据
  • [x] Json、Image、Xml 响应
  • [x] 下载文件:恢复、暂停、取消
  • [x] 上传文件、数据、参数(多部分)
  • [x] 进度闭包
  • [x] 后台下载、上传
  • [x] 认证
  • [x] 批量操作
  • [x] BaseURL
  • [x] 可定制的头部

演示应用

screenshot

用法

使用以下方法之一创建 Net 实例:

// without baseURL
let net = Net()

// with baseURL
let net = Net(baseUrlString: "http://www.puqiz.com/") 

HttpRequest

GET 请求
let url = "get_path"
let params = ["integerNumber": 1, "doubleNumber": 2.0, "string": "hello"]

net.GET(url, params: params, successHandler: { responseData in
        let result = responseData.json(error: nil)
        NSLog("result \(result)")
    }, failureHandler: { error in
        NSLog("Error")
    })

// you can also make a request with absolute url
let url = "http://www.puqiz.com/get_path"
net.GET(absoluteUrl: url, params: params, successHandler: { responseData in
        let result = responseData.json(error: nil)
        NSLog("result \(result)")
    }, failureHandler: { error in
        NSLog("Error")
    })

您也可以使用嵌套参数

// nested params
let params = ["string": "test",
            "integerNumber": 1,
            "floatNumber": 1.5,
            "array": [10, 20, 30],
            "dictionary": ["x": 100.0, "y": 200.0],
            "image": NetData(pngImage: img, filename: "myIcon")]

通过在 successHandler 闭包中使用 responseData,您可以快速

  • 获取 json 字典
  • 获取图片
  • 解析 xml

进行 GET、POST、PUT、DELETE 请求。

// get json dictionary from response data
let jsonDic = responseData.json(error: error)

// get image from response data
let image = responseData.image()

// parse xml with delegate
let result = responseData.parseXml(delegate: self)
POST 请求

Net 会自动检查您的参数,以将请求作为 URL 编码请求或多部分请求发送。因此,您可以使用数字、字符串、图片或二进制数据轻松地发布。

  • URL-Encoded 请求
let url = "post_path"
let params = ["string": "test", "integerNumber": 1, "floatNumber": 1.5]

net.POST(url, params: params, successHandler: { responseData in
        let result = responseData.json(error: nil)
        NSLog("result: \(result)")
    }, failureHandler: { error in
        NSLog("Error")
    })
  • 多部分请求
let url = "post_path"
let img = UIImage(named: "puqiz_icon")

let params = ["string": "test", "integerNumber": 1,
            "icon": NetData(pngImage: img, filename: "myIcon")]

net.POST(url, params: params, successHandler: { responseData in
        let result = responseData.json(error: nil)
        NSLog("result: \(result)")
    }, failureHandler: { error in
        NSLog("Error")
    })
PUT 请求
let url = "put_path"
let params = ["string": "test", "integerNumber": 1, "floatNumber": 1.5]

net.PUT(url, params: params, successHandler: { responseData in
        let result = responseData.json(error: nil)
        NSLog("result: \(result)")
    }, failureHandler: { error in
        NSLog("Error")
    })
DELETE 请求
let url = "delete_path"
let params = ["id": 10]

net.DELETE(url, params: params, successHandler: { responseData in
        NSLog("result: \(result)")
    }, failureHandler: { error in
        NSLog("Error")
    })

任务

在使用下载/上传功能之前,您必须调用 setupSession 方法来设置会话。

// setup session without backgroundIdentifier
net.setupSession()

要执行后台下载或上传,您必须使用背景识别字符串调用 setupSession 方法。然后即使在应用挂起、退出或崩溃时,您的下载/上传任务也可以运行。

// setup session with backgroundIdentifier
net.setupSession(backgroundIdentifier: "com.nghialv.download")

// you can set eventsForBackgroundHandler closure
// this closure will be invoked when a task is completed in the background
net.eventsForBackgroundHandler = { urlSession in
        urlSession.getDownloadingTasksCount{ downloadingTaskCount in
        if downloadingTaskCount == 0 {
            NSLog("All files have been downloaded!")
        }
    }
}
下载
let downloadTask = net.download(absoluteUrl: url, progress: { progress in
        NSLog("progress \(progress)")
    }, completionHandler: { fileUrl, error in
        if error != nil {
            NSLog("Download failed")
        }
        else {
            NSLog("Downloaded to  : \(fileUrl)")
        }
    })

// you can control your task
downloadTask.resume()
downloadTask.suspend()
downloadTask.cancel()
上传
  • 使用文件路径上传
let task = net.upload(absoluteUrl: url, fromFile: file, progressHandler: { progress in
        NSLog("progress \(progress)")
    }, completionHandler: { error in
        if error != nil {
            NSLog("Upload failed : \(error)")
        }
        else {
            NSLog("Upload completed")
        }
    })
  • 使用数据上传
let yourData = NSData(...)

net.upload(absoluteUrl: url, data: yourData, progressHandler: { progress in
        NSLog("progress: \(progress)")
    }, completionHandler: { error in
        NSLog("Upload completed")
    })
  • 使用参数上传
let image = UIImage(named: "image_file")
let imageData = UIImagePNGRepresentation(image)
let params = ["number": 1, "string": "net", "data": imageData]

net.upload(absoluteUrl: imgUrl, params: params, progressHandler: { progress in
        NSLog("progress: \(progress)")
    }, completionHandler: { error in
        NSLog("Upload completed")
    })

默认情况下,上传任务将以 POST 方法执行,并且

  • Content-Type = application/octet-stream(上传文件或数据)
  • 内容类型Content-Type = multipart/form-data(带参数上传)

但在继续之前,您可以配置上传任务。

// set method
yourUploadTask.setHttpMethod(.PUT)

// set header field
yourUploadTask.setValue(value: "your_value", forHttpHeaderField: "header_field")

集成

只需将 Net 文件夹拖到项目树中