swift 常用網路請求框架 Alamofire
let url="\(BASEURL)"+LUNBOURL
let image:UIImage=UIImage.init(named:"bannerhomeOne")!
//獲取資料
func normalGetData() {
//get--01--response
Alamofire.request(url).response { (returnResult)in
if let data = returnResult.data,let utf8Text =String(data: data, encoding: .utf8) {
print(" utf8Text =\(utf8Text)")
}
}
// get--02---responseData
Alamofire.request(url).responseData { (returnResult)in
debugPrint(" returnResult =\(returnResult)")
if let data = returnResult.data,let utf8Text =String(data: data, encoding: .utf8) {
print(" utf8Text =\(utf8Text)")
}
}
//get--03--responseString
Alamofire.request(url).responseString { (returnResult)in
debugPrint(" Sucess =\(returnResult.result.isSuccess)")
print(" returnResult =\(returnResult)")
}
//get --04--responseJSON
Alamofire.request(url).responseJSON { (returnResult)in
debugPrint("responseJSON -->\(returnResult)")
if let json = returnResult.result.value {//這個轉換的json資料比較正規
print("responseJSON -->\(json)")
/* 返回請求地址、資料、和狀態結果等資訊
print(" responseJSON() --> \(returnResult.request!)")
print("responseJSON() --> \(returnResult.data!)")
print(" responseJSON() --> \(returnResult.result)")
*/
}
}
// get--05---queue
// 補充:1.引數:queue:請求佇列 --> 就是預設在主執行緒中執行~我們可以自定義排程佇列。
// 官方解釋:Response handlers by default are executed on the main dispatch queue. However, a custom dispatch queue can be provided instead.
let customQueue = DispatchQueue.global(qos: .utility)
Alamofire.request(url).responseJSON(queue: customQueue) { (returnResult)in
print("請求佇列 -->\(returnResult)")
}
//get---06帶請求頭設定獲取資料
let headers: HTTPHeaders = [
"Accept":"application/json"//設定客戶端以什麼格式解析伺服器返回的資料
]
Alamofire.request(url, headers: headers).responseJSON { (returnResult)in
print("獲取資料並設定請求頭 --> returnResult =\(returnResult)")
}
}
//GET請求---無引數
func getData() {
Alamofire.request(url, method: .get).responseJSON { (returnResult)in
print("GET 請求無引數 --> returnResult =\(returnResult)")
}
}
//POST請求----無引數
func postData(){
Alamofire.request(url, method: .post).responseJSON { (returnResult)in
print("POST 請求無引數 --> returnResult =\(returnResult)")
}
}
//POST請求有引數
func postDataWithParams() {
let param = [String:String]()
Alamofire.request(url, method: .post, parameters: param).responseJSON { (returnResult)in
print(" POST 請求有引數引數 --> returnResult =\(returnResult)")
}
}
// URLRequest的方式請求
func URLRequestWidth() {
let urls = URL(string: url)
var urlRequest = URLRequest(url: urls!)
urlRequest.httpMethod = "POST"
let param = ["type":"","key":""]
do {
urlRequest.httpBody = try JSONSerialization.data(withJSONObject: param, options: [])
} catch {
print(error)
}
urlRequest.setValue("application/json", forHTTPHeaderField:"Content-Type")
Alamofire.request(urlRequest).responseData { (returnResult)in
debugPrint(returnResult)
if let data = returnResult.data,let utf8Text = String(data: data, encoding: .utf8) {
print(" URLRequest請求方式 --> utf8Text =\(utf8Text)")
}
}
}
//下載不帶進度
func download() {
// 1.下載圖片
Alamofire.download(url).responseData { (returnResult)in
if let data = returnResult.result.value {
let image = UIImage(data: data)
print("image =\(image!)")
} else {
print("下載失敗")
}
}
}
//下載帶進度
func downoadWithProgress() {
Alamofire.download(url).downloadProgress { (progress)in
print("下載進度 =\(progress.fractionCompleted)")
}.responseData { (returnResult) in
if let data = returnResult.result.value {
let image = UIImage(data: data)
print("image =\(image!)")
} else {
print("下載失敗")
}
}
}
//uploadData----上傳data資料
func uploadData() {
let imageData =UIImagePNGRepresentation(image)!
Alamofire.upload(imageData, to: url).responseJSON { response in
debugPrint(response)
}
}
//uploadFile----上傳檔案
func uploadFile() {
let fileURL = Bundle.main.url(forResource:"video", withExtension:"mov")
Alamofire.upload(fileURL!, to: url).responseJSON { response in
debugPrint(response)
}
}
//uploadMultiFormData----上傳多個表單資料
func uploadMultiFormData() {
Alamofire.upload(
multipartFormData: { multipartFormData in//新增多個表單資料是吧本地url傳上去
// multipartFormData.append(unicornImageURL, withName: "unicorn")
// multipartFormData.append(rainbowImageURL, withName: "rainbow")
},
to: url,
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload,_,_):
upload.responseJSON { responsein
debugPrint(response)
}
case .failure(let encodingError):
print(encodingError)
}
}
)
}
//上傳帶進度條
func uploadWithProgress() {
let fileURL = Bundle.main.url(forResource:"video", withExtension:"mov")
Alamofire.upload(fileURL!, to: url)
.uploadProgress { progress in // main queue by default
print("Upload Progress:\(progress.fractionCompleted)")
}
.downloadProgress { progress in // main queue by default
print("Download Progress:\(progress.fractionCompleted)")
}
.responseJSON { response in
debugPrint(response)
}
}