一,SwiftHTTP的說明與配置
1,什麼是SwiftHTTP
SwiftHTTP本質是基於`NSURLSession`,並做了封裝。使用SwiftHTTP可以讓我們網絡請求相關代碼(如獲取數據,提交數據,上傳文件,下載文件等)更加簡潔易用。(有點類似於我前面文章介紹的另一個網絡庫:Alamofire)
2,SwiftHTTP的功能特性:
(3)支持參數編碼
(4)內置JSON請求序列化
(5)上傳/下載文件帶有進度
(6)代碼簡潔
3,SwiftHTTP的安裝與配置
import SwiftHTTP
二,使用SwiftHTTP進行數據請求
1,GET請求
(1)不帶參數
do {
let opt = try HTTP.GET("http://111cn.net")
opt.start { response in
if let err = response.error {
print("error: \(err.localizedDescription)")
return
}
print("獲取到數據: \(response.description)")
}
} catch let error {
print("請求失敗: \(error)")
}
(2)帶參數
do {
//實際的url是: http://111cn.net?hello=world¶m2=1
let opt = try HTTP.GET("http://111cn.net", parameters: ["hello": "world", "param2": 1])
opt.start { response in
if let err = response.error {
print("error: \(err.localizedDescription)")
return
}
print("獲取到數據: \(response.description)")
}
} catch let error {
print("請求失敗: \(error)")
}
2,POST請求
let params = ["param": "param1",
"array": ["first array element","second","third"],
"num": 23,
"dict": ["someKey": "someVal"]]
do {
let opt = try HTTP.POST("http://www.111cn.net", parameters: params)
opt.start { response in
//進行具體的響應操作...
}
} catch let error {
print("請求失敗: \(error)")
}
3,支持自定義Http頭信息(HTTP Headers)
do {
let opt = try HTTP.GET("http://www.111cn.net", parameters: ["hello": "there"],
headers: ["header": "value"])
opt.start { response in
//進行具體的響應操作...
}
} catch let error {
print("請求失敗: \(error)")
}
三,使用操作隊列進行請求
SwiftHTTP同樣支持運行隊列(Operation Queue),我們可以把所有數據請求放到隊列中就回自動進行多線程異步請求。
同時通過 maxConcurrentOperationCount 屬性,可以設置同一時間最多允許多少個請求同時進行。
let operationQueue = NSOperationQueue()
operationQueue.maxConcurrentOperationCount = 2 //最大任務數
do {
let opt1 = try HTTP.New("http://www.111cn.net", method: .GET)
opt1.onFinish = { response in
//進行具體的響應操作...
}
operationQueue.addOperation(opt1)
let opt2 = try HTTP.New("http://www.baidu.com", method: .GET)
opt2.onFinish = { response in
//進行具體的響應操作...
}
operationQueue.addOperation(opt2)
let opt3 = try HTTP.New("http://www.111cn.net ", method: .GET)
opt3.onFinish = { response in
//進行具體的響應操作...
}
operationQueue.addOperation(opt3)
} catch let error {
print("請求失敗: \(error)")
}
可以使用 cancel() 方法停止單個任務:
opt2.cancel() //取消這個請求任務
也可以通過 NSOperationQueue 的 cancelAllOperations() 方法取消所有的任務:
operationQueue.cancelAllOperations() //取消所有線程操作