swift 網絡請求Alamofire的使用

一蛤迎、使用Alamofire進行數(shù)據(jù)請求

1星立,以GET請求為例

(1)不帶參數(shù)聊训,不帶結果處理

Alamofire.request("https://httpbin.org/get")

(2)帶參數(shù),不帶結果處理

Alamofire.request("https://httpbin.org/get", parameters: ["foo":"bar"])

(3)帶參數(shù),也帶結果處理(這里以返回結果為json格式的為例)

Alamofire.request("https://httpbin.org/get", parameters: ["foo":"bar"])

.responseJSON { responsein

print(response.request)// original URL request

print(response.response)// URL response

print(response.data)// server data

print(response.result)// result of response serialization

ifletJSON= response.result.value {

print("JSON: \(JSON)")//具體如何解析json內容可看下方“響應處理”部分

}}

2,響應處理(Response Handling)

(1)除了上面樣例使用的responseJSON(處理json類型的返回結果)外,Alamofire還提供了許多其他類型的響應處理方法:

response()

responseData()

responseString(encoding: NSStringEncoding)

responseJSON(options: NSJSONReadingOptions)

responsePropertyList(options: NSPropertyListReadOptions)

(2)Response Handler

Alamofire.request("https://httpbin.org/get", parameters: ["foo":"bar"])

.response { responsein

print("Request: \(response.request)")

print("Response: \(response.response)")

print("Error: \(response.error)")

ifletdata = response.data,letutf8Text =String(data: data, encoding: .utf8) {

print("Data: \(utf8Text)")

}}

(3)Response Data Handler

Alamofire.request("https://httpbin.org/get", parameters: ["foo":"bar"])

.responseData { responsein

debugPrint("All Response Info: \(response)")

ifletdata = response.result.value,letutf8Text =String(data: data, encoding: .utf8) {

print("Data: \(utf8Text)")

}}

(4)Response String Handler

Alamofire.request("https://httpbin.org/get", parameters: ["foo":"bar"])

.responseString { responsein

print("Success: \(response.result.isSuccess)")

print("Response String: \(response.result.value)")

}

(5)Response JSON Handler

使用responseJSON 方法的話沟启,JSON數(shù)據(jù)會被自動轉化為 Dictionary或Array。假設我們返回的json數(shù)據(jù)格式如下:

[{"name": "hangge","phones": [{"name": "公司","number": "123456"},{"name": "家庭","number":"001"}]},{"name": "big boss","phones": [{"name": "公司","number": "111111"}]}]

使用responseJSON自動解析json數(shù)據(jù):

Alamofire.request("http://www.hangge.com/jsonData.php")

.responseJSON { responsein

switchresponse.result.isSuccess {

case true:

//把得到的JSON數(shù)據(jù)轉為數(shù)組

ifletitems = response.result.valueas?NSArray{

//遍歷數(shù)組得到每一個字典模型

fordictinitems{

print(dict)

}}

case false:

print(response.result.error)

}}

responseJSON也可以配合SwiftyJSON一起使用犹菇,具體可以查看我原來寫的這篇文章:Swift - SwiftyJSON的使用詳解

(6)同樣也支持鏈式的返回結果處理

Alamofire.request("https://httpbin.org/get")

.responseString { responsein

print("Response String: \(response.result.value)")

}.responseJSON { responsein

print("Response JSON: \(response.result.value)")

}

3德迹,請求類型(HTTP Methods)

除了上面使用的.Get類型(不指定的話,默認都是使用Get請求)揭芍。Alamofire還定義了許多其他的HTTP 方法(HTTP Medthods)可以使用胳搞。

publicenumHTTPMethod:String{

caseoptions ="OPTIONS"

caseget="GET"

casehead??? ="HEAD"

casepost??? ="POST"

caseput???? ="PUT"

casepatch?? ="PATCH"

casedelete? ="DELETE"

casetrace?? ="TRACE"

caseconnect ="CONNECT"

}

比如要使用POST請求,把Alamofire.request第二個參數(shù)做修改即可:

Alamofire.request("http://httpbin.org/post", method: .post)

4称杨,請求參數(shù)(Parameters)

(1)使用GET類型請求的時候肌毅,參數(shù)會自動拼接在url后面

Alamofire.request("https://httpbin.org/get", parameters: ["foo":"bar"])

//https://httpbin.org/get?foo=bar

(2)使用POST類型請求的時候,參數(shù)是放在在HTTP body里傳遞列另,url上看不到

letparameters:[String:Any] = [

"foo":"bar",

"baz": ["a", 1],

"qux": [

"x": 1,

"y": 2,

"z": 3

]

]

Alamofire.request("https://httpbin.org/post", method: .post, parameters: parameters)

// HTTP body: foo=bar&baz[]=a&baz[]=1&qux[x]=1&qux[y]=2&qux[z]=3

5芽腾,參數(shù)編碼方式(Parameter Encoding)

除了默認的方式外旦装,Alamofire還支持URL页衙、JSON、PropertyList以及自定義格式方式編碼參數(shù)阴绢。

比如我們想要把一個字典類型的數(shù)據(jù)店乐,使用json格式發(fā)起POST請求:

letparameters:[String:Any] = [

"foo": [1,2,3],

"bar": [

"baz":"qux"

]

]

Alamofire.request("https://httpbin.org/post", method: .post, parameters: parameters,

encoding:JSONEncoding.default)

// HTTP body: {"foo": [1, 2, 3], "bar": {"baz": "qux"}}

服務端php頁面可以這么取得發(fā)送過來的JSON數(shù)據(jù):

$postdata= json_decode(file_get_contents("php://input"),TRUE);

$foo=$postdata["foo"];

foreach($fooas$item){

echo$item."|";

}

//輸出:1|2|3|

6,支持自定義Http頭信息(HTTP Headers)

letheaders:HTTPHeaders= [

"Authorization":"Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==",

"Accept":"application/json"

]

Alamofire.request("https://httpbin.org/headers", headers: headers)

.responseJSON { responsein

debugPrint(response)

}

二呻袭、判斷數(shù)據(jù)請求是否成功眨八,并做相應的處理

在請求響應對象之前調用的.validate()函數(shù)是另一個易用的 Alamofire 特性。

將其與請求和響應鏈接左电,以確認響應的狀態(tài)碼在默認可接受的范圍(200到299)內廉侧。如果認證失敗,響應處理方法將出現(xiàn)一個相關錯誤篓足,我們可以根據(jù)不同在完成處理方法中處理這個錯誤段誊。

比如下面的樣例,成功時會打印成功信息栈拖,失敗時輸出具體錯誤信息连舍。

Alamofire.request("https://httpbin.org/get", parameters: ["foo":"bar"])

.validate()

.responseJSON { responsein

switchresponse.result.isSuccess {

casetrue:

print("數(shù)據(jù)獲取成功!")

casefalse:

print(response.result.error)

}}

三、打印調試(print和debugPrint)

不管是request對象還是response對象都是支持打印輸出的涩哟。根據(jù)不同的調試需求索赏,我們可以自行選擇使用print還是debugPrint盼玄。

1,打印request對象

letrequest =Alamofire.request("https://httpbin.org/ip", parameters: ["foo":"bar"])

print(request)

/********** 下面是控制臺輸出 ***************

GEThttps://httpbin.org/ip?foo=bar

******************************************/

letrequest =Alamofire.request("https://httpbin.org/ip", parameters: ["foo":"bar"])

debugPrint(request)

/********** 下面是控制臺輸出 ***************

$ curl -i \

-H "User-Agent: hangge_970/com.hangge.hangge-970 (1; OS Version 9.1 (Build 13B137))" \

-H "Accept-Encoding: gzip;q=1.0,compress;q=0.5" \

-H "Accept-Language: zh-Hans-CN;q=1.0,en-CN;q=0.9" \

"https://httpbin.org/ip?foo=bar"

******************************************/

2潜腻,打印response對象

Alamofire.request("https://httpbin.org/get")

.responseString { responsein

debugPrint(response)

}

/********** 下面是控制臺輸出 ***************

SUCCESS: {

"args": {},

"headers": {

"Accept": "*/*",

"Accept-Encoding":"gzip;q=1.0,compress;q=0.5",

"Accept-Language":"zh-Hans-CN;q=1.0,en-CN;q=0.9",

"Host":"httpbin.org",

"User-Agent":"hangge_970/com.hangge.hangge-970 (1; OS Version 9.1 (Build 13B137))"

},

"origin":"180.109.163.139",

"url":"https://httpbin.org/get"

}

******************************************/

Alamofire.request(.GET,"https://httpbin.org/get")

.responseString { responsein

print(response)

}

/********** 下面是控制臺輸出 ***************

[Request]: { URL:https://httpbin.org/get}

[Response]: { URL:https://httpbin.org/get} { status code: 200, headers {

"Access-Control-Allow-Origin" = "*";

"Content-Length" = 354;

"Content-Type" = "application/json";

Date = "Tue, 08 Dec 2015 01:57:45 GMT";

Server = nginx;

"access-control-allow-credentials" = true;

} }

[Data]: 354 bytes

[Result]: SUCCESS: {

"args": {},

"headers": {

"Accept": "*/*",

"Accept-Encoding":"gzip;q=1.0,compress;q=0.5",

"Accept-Language":"zh-Hans-CN;q=1.0,en-CN;q=0.9",

"Host":"httpbin.org",

"User-Agent":"hangge_970/com.hangge.hangge-970 (1; OS Version 9.1 (Build 13B137))"

},

"origin":"180.109.163.139",

"url":"https://httpbin.org/get"

}

原文鏈接:swift 數(shù)據(jù)請求Alamofire的使用

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末埃儿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子融涣,更是在濱河造成了極大的恐慌蝌箍,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件暴心,死亡現(xiàn)場離奇詭異妓盲,居然都是意外死亡,警方通過查閱死者的電腦和手機专普,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門悯衬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人檀夹,你說我怎么就攤上這事筋粗。” “怎么了炸渡?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵娜亿,是天一觀的道長。 經常有香客問我蚌堵,道長买决,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任吼畏,我火速辦了婚禮督赤,結果婚禮上,老公的妹妹穿的比我還像新娘泻蚊。我一直安慰自己躲舌,他們只是感情好,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布性雄。 她就那樣靜靜地躺著没卸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪秒旋。 梳的紋絲不亂的頭發(fā)上约计,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機與錄音滩褥,去河邊找鬼病蛉。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的铺然。 我是一名探鬼主播俗孝,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼魄健!你這毒婦竟也來了赋铝?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤沽瘦,失蹤者是張志新(化名)和其女友劉穎革骨,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體析恋,經...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡良哲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了助隧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筑凫。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖并村,靈堂內的尸體忽然破棺而出巍实,到底是詐尸還是另有隱情,我是刑警寧澤哩牍,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布棚潦,位于F島的核電站,受9級特大地震影響膝昆,放射性物質發(fā)生泄漏丸边。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一外潜、第九天 我趴在偏房一處隱蔽的房頂上張望原环。 院中可真熱鬧挠唆,春花似錦处窥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至俄讹,卻和暖如春哆致,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背患膛。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工摊阀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓胞此,卻偏偏與公主長得像臣咖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子漱牵,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內容