Net 是一个用 Swift 编写的 HttpRequest 包装器
使用以下方法之一创建 Net 实例:
// without baseURL
let net = Net()
// with baseURL
let net = Net(baseUrlString: "http://www.puqiz.com/")
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,您可以快速
进行 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 编码请求或多部分请求发送。因此,您可以使用数字、字符串、图片或二进制数据轻松地发布。
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 文件夹拖到项目树中