Swift HTTP网络操作库Alamofire使用详解1(配置,以及数据请求)

一,Alamofire的说明与配置

 

 

1,什么是Alamofire

(1)Alamofire 的前身是 AFNetworking。AFNetworking 是 iOS 和 OS X 上很受欢迎的第三方HTTP网络基础库。
(2)其实 AFNetwork 的前缀 AF 便是 Alamofire 的缩写。
(3)Swift发布后,AFNetworking的作者又用Swift语言写了个相同功能的库,这便是 Alamofire。
(4)Alamofire 本质是基于`NSURLSession`,并做了封装。使用 Alamofire 可以让我们网络请求相关代码(如获取数据,提交数据,上传文件,下载文件等)更加简洁易用。 

 

 

 

2,Alamofire的功能特性:

 

(1)链式的请求/响应方法

 

(2)URL / JSON / plist参数编码

 

(3)上传类型支持:文件(File )、数据(Data )、流(Stream)以及MultipartFormData

 

(4)支持文件下载,下载支持断点续传

 

(5)支持使用NSURLCredential进行身份验证

 

(6)HTTP响应验证

 

(7)TLS Certificate and Public Key Pinning

 

(8)Progress Closure & NSProgress

3,Alamofire的安装与配置
(1)从 GitHub 上下载最新的代码:https://github.com/Alamofire/Alamofire

(2)将下载下来的源码包中 Alamofire.xcodeproj 拖拽至你的工程中

 

 

(3)工程 -> General -> Embedded Binaries项,增加 Alamofire.framework

 

 

(4)最后,在需要使用 Alamofire 的地方 import 进来就可以了

import Alamofire

二,使用Alamofire进行数据请求

1,以GET请求为例

(1)不带参数,不带结果处理

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

(2)带参数,不带结果处理

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

(3)带参数,也带结果处理(这里以返回结果为json格式的为例)

Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"])
         .responseJSON { response in
             print(response.request)  // original URL request
             print(response.response) // URL response
             print(response.data)     // server data
             print(response.result)   // result of response serialization
 
             if let JSON = response.result.value {
                 print("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(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"])
         .response { request, response, data, error in
             print(request)
             print(response)
             print(data)
             print(error)
          }
(3)Response Data Handler

Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"])
         .responseData { response in
             print(response.request)
             print(response.response)
             print(response.result)
          }
(4)Response String Handler

Alamofire.request(.GET, "https://httpbin.org/get")
         .responseString { response in
             print("Success: \(response.result.isSuccess)")
             print("Response String: \(response.result.value)")
         }
(5)Response JSON Handler

Alamofire.request(.GET, "https://httpbin.org/get")
         .responseJSON { response in
             debugPrint(response)
         }
(6)同样也支持链式的返回结果处理

Alamofire.request(.GET, "https://httpbin.org/get")
         .responseString { response in
             print("Response String: \(response.result.value)")
         }
         .responseJSON { response in
             print("Response JSON: \(response.result.value)")
         }
3,请求类型(HTTP Methods)
除了上面使用的 .Get 类型。Alamofire还定义了许多其他的HTTP 方法(HTTP Medthods)可以使用。

public enum Method: String {
    case OPTIONS, GET, HEAD, POST, PUT, PATCH, DELETE, TRACE, CONNECT
}
比如要使用 POST 请求,把 Alamofire.request 第一个参数做修改即可:
1
Alamofire.request(.POST, "http://httpbin.org/post")

4,请求参数(Parameters)
(1)使用GET类型请求的时候,参数会自动拼接在url后面

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

(2)使用POST类型请求的时候,参数是放在在HTTP body里传递,url上看不到

let parameters = [
    "foo": "bar",
    "baz": ["a", 1],
    "qux": [
        "x": 1,
        "y": 2,
        "z": 3
    ]
]
 
Alamofire.request(.POST, "https://httpbin.org/post", parameters: parameters)
// HTTP body: foo=bar&baz[]=a&baz[]=1&qux[x]=1&qux[y]=2&qux[z]=3

5,参数编码方式(Parameter Encoding)
除了默认的方式外,Alamofire还支持URL、URLEncodedInURL、JSON、Property List以及自定义格式方式编码参数。

enum ParameterEncoding {
    case URL
    case URLEncodedInURL
    case JSON
    case PropertyList(format: NSPropertyListFormat, options: NSPropertyListWriteOptions)
    case Custom((URLRequestConvertible, [String: AnyObject]?) -> (NSMutableURLRequest, NSError?))
 
    func encode(request: NSURLRequest, parameters: [String: AnyObject]?) -> (NSURLRequest, NSError?)
    { ... }
}

比如我们想要把一个字典类型的数据,使用json格式发起POST请求:
1

let parameters = [
    "foo": [1,2,3],
    "bar": [
        "baz": "qux"
    ]
]
 
Alamofire.request(.POST, "https://httpbin.org/post", parameters: parameters, encoding: .JSON)
// HTTP body: {"foo": [1, 2, 3], "bar": {"baz": "qux"}}

6,支持自定义Http头信息(HTTP Headers)

let headers = [
    "Authorization": "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==",
    "Content-Type": "application/x-www-form-urlencoded"
]
 
Alamofire.request(.GET, "https://httpbin.org/get", headers: headers)
         .responseJSON { response in
             debugPrint(response)
         }

时间: 2024-07-30 23:40:42

Swift HTTP网络操作库Alamofire使用详解1(配置,以及数据请求)的相关文章

Swift实现HTTP网络操作库Alamofire使用详解4(用户权限认证)

  八,使用Alamofire进行用户认证 1,Alamofire支持如下几种认证(Authentication) 本文讲解使用 Alamofire 进行 HTTP Basic 验证. 2,HTTP Basic认证介绍 (1)HTTP Basic认证是允许HTTP服务器对WEB浏览器进行用户身份证的方法. (2)当一个客户端向HTTP服务器进行数据请求时,客户端会接收到HTTP服务器的身份认证要求,这时客户端会提示用户输入用户名及密码,然后将用户名及密码以BASE64加密.并于每次请求数据时,将

Swift HTTP网络操作库SwiftHTTP使用详解1(配置,及数据请求)

一,SwiftHTTP的说明与配置 1,什么是SwiftHTTP SwiftHTTP本质是基于`NSURLSession`,并做了封装.使用SwiftHTTP可以让我们网络请求相关代码(如获取数据,提交数据,上传文件,下载文件等)更加简洁易用.(有点类似于我前面文章介绍的另一个网络库:Alamofire) 2,SwiftHTTP的功能特性: (1)便利的闭包API (2)支持运行队列(NSOperationQueue) (3)支持参数编码 (4)内置JSON请求序列化 (5)上传/下载文件带有进

Swift HTTP网络操作库Alamofire实现文件上传详解

六,使用Alamofire进行文件上传 1,Alamofire支持如下上传类型: File Data Stream MultipartFormData 2,使用文件流的形式上传文件 let fileURL = NSBundle.mainBundle().URLForResource("hangge", withExtension: "zip")   Alamofire.upload(.POST, "http://www.hangge.com/upload.

Swift HTTP网络操作库Alamofire实现文件下载,断点续传例子

七,使用Alamofire进行文件下载 1,自定义下载文件的保存目录 下面代码将logo图片下载下来保存到用户文档目录下(Documnets目录),文件名不变. Alamofire.download(.GET, "yun_qi_img/logo.png") {     temporaryURL, response in     let fileManager = NSFileManager.defaultManager()     let directoryURL = fileMana

python数据库操作常用功能使用详解(创建表/插入数据/获取数据)_python

实例1.取得MYSQL版本 复制代码 代码如下: # -*- coding: UTF-8 -*-#安装MYSQL DB for pythonimport MySQLdb as mdbcon = Nonetry:    #连接mysql的方法:connect('ip','user','password','dbname')    con = mdb.connect('localhost', 'root',        'root', 'test');    #所有的查询,都在连接con的一个模块

《Android 网络开发与应用实战详解》——2.3节Android系统架构

2.3 Android系统架构 Android 网络开发与应用实战详解 在本节内容中,将进一步分解Android应用程序,详细剖析Android应用程序的核心构成部分,为读者学习本书后面知识打下基础. 2.3.1 Android体系结构介绍 Android作为一个移动设备的平台,其软件层次结构包括操作系统(OS).中间件(MiddleWare)和应用程序(Application).根据Android的软件框图,其软件层次结构自下而上分为以下4层. (1)操作系统层(OS). (2)各种库(Lib

《Android 网络开发与应用实战详解》——2.1节简析Android安装文件

2.1 简析Android安装文件 Android 网络开发与应用实战详解 当我们下载并安装Android后,会在其安装目录中看到一些安装文件.这些文件具体是干什么用的,了解这些对学习后面的开发知识十分有用.所以在本节的内容中将简要介绍这些安装文件的基本知识. 2.1.1 Android SDK目录结构 安装Android SDK后,其安装目录的具体结构如图2-1所示. temp:里面包含了一些常用的文件模板. tools:包含了一些通用的工具文件. usb_driver:包含了AMD64和X8

《Android 网络开发与应用实战详解》——1.4节Android模拟器

1.4 Android模拟器 Android 网络开发与应用实战详解 我们都知道程序开发需要调试,只有经过调试之后才能知道程序是否正确运行.作为一款手机系统,怎么样在能在计算机平台上调试Android程序呢?不用担心,谷歌提供了模拟器来解决此问题.所谓模拟器,就是指在计算机上模拟安卓系统,可以用这个模拟器来调试并运行开发的Android程序.开发人员不需要一个真实的Android手机,使用计算机就可以模拟运行一个手机,即可开发出应用在手机上面的程序.模拟器在计算机上模拟运行的效果如前面的图1-5

《Android 网络开发与应用实战详解》——2.2节解析Android SDK实例

2.2 解析Android SDK实例 Android 网络开发与应用实战详解 在Android安装后的目录中有一个名为"samples"的子目录,在里面保存了SDK中的几个演示实例.这些实例从不同的方面展示了SDK的特性.例如"android-3"目录中的实例文件结构如图2-8所示. 在本节的内容中,将引领读者浏览图2-8中各个实例的效果. 1.HelloActivity 这和编程语言中的Hello Word程序类似,是一个Android平台上的最简单程序,运行后