Alamofire-Swift Networking网络库
2015-08-17 14:49
597 查看
Alamofire是 Swift 语言的
HTTP 网络开发工具包,相当于Swift实现AFNetworking版本。
当然,AFNetworking非常稳定,在Mac OSX与iOS中也能像其他Objective-C代码一样用Swift编写。不过Alamofire更适合Swift语言风格习惯(Alamofire与AFNetworking可以共存一个项目中,互不影响).
Alamofire 取名来源于 Alamo
Fire flower
Alamofire安装使用方法
使用CocoaPods安装,在podfilesource 'https://github.com/CocoaPods/Specs.git' platform :ios, '8.0' use_frameworks! pod 'Alamofire', '~> 1.2'
submodule 方式安装
$ git submodule add https://github.com/Alamofire/Alamofire.git
1.下载源码将
Alamofire.xcodeproj拖拽至工程中如下图:
![](http://img.swiftmi.com/codeimage/201409/13_1410878369754_646.png)
2.工程->Build Phases->Target Dependencies 增加Alamofire
![](http://img.swiftmi.com/codeimage/201409/13_1410878395612_464.png)
3.点击如下图“+”按钮选择"New Copy Files Phase"添加,改名为“Copy Frameworks”并 选择选项下的“ Destination”为“ Frameworks”,然后添加“Alamofire.framework”
![](http://img.swiftmi.com/codeimage/201504/13_1429926611323_266.png)
4.在需要使用的swift文件中加入
import Alamofire,如下图:
![](http://img.swiftmi.com/codeimage/201409/13_1410878518051_494.png)
功能
Chainable Request / Response methodsURL / JSON / plist Parameter Encoding
Upload File / Data / Stream
Download using Request or Resume data
Authentication with NSURLCredential
Progress Closure & NSProgress
cURL Debug Output
1.0版本计划
1.0版本将在Swift 1.0发布之后。100% Unit Test Coverage
Complete Documentation
HTTP Response Validation
TLS Chain Validation
UIKit / AppKit Extensions
环境要求
Xcode 6iOS 7.0+ / Mac OS X 10.9+
Alamofire使用方法
GET 请求
Alamofire.request(.GET, "http://httpbin.org/get")
带参数
Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])
Response结果处理
Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"]).response { (request, response, data, error) in
println(request)
println(response)
println(error)
}
Response结果字符串处理
Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"]).responseString { (request, response, string, error) in
println(string)
}
HTTP 方法(Medthods)
Alamofire.Method enum 列表出在RFC 2616中定义的HTTP方法 §9:public enum Method: String { case OPTIONS = "OPTIONS" case GET = "GET" case HEAD = "HEAD" case POST = "POST" case PUT = "PUT" case PATCH = "PATCH" case DELETE = "DELETE" case TRACE = "TRACE" case CONNECT = "CONNECT" }
这些值可以作为
Alamofire.request请求的第一个参数.
Alamofire.request(.POST, "http://httpbin.org/post") Alamofire.request(.PUT, "http://httpbin.org/put") Alamofire.request(.DELETE, "http://httpbin.org/delete")
POST请求
let parameters = [ "foo": "bar", "baz": ["a", 1], "qux": [ "x": 1, "y": 2, "z": 3 ] ] Alamofire.request(.POST, "http://httpbin.org/post", parameters: parameters)
发送以下HttpBody内容:
foo=bar&baz[]=a&baz[]=1&qux[x]=1&qux[y]=2&qux[z]=3
Alamofire 使用
Alamofire.ParameterEncoding可以支持URL query/URI form,JSON, PropertyList方式编码参数。
Parameter Encoding
enum ParameterEncoding { case URL case JSON(options: NSJSONWritingOptions) case PropertyList(format: NSPropertyListFormat, options: NSPropertyListWriteOptions) func encode(request: NSURLRequest, parameters: [String: AnyObject]?) -> (NSURLRequest, NSError?) { ... } }
NSURLRequest方式编码参数
let URL = NSURL(string: "http://httpbin.org/get") var request = NSURLRequest(URL: URL) let parameters = ["foo": "bar"] let encoding = Alamofire.ParameterEncoding.URL (request, _) = encoding.encode(request, parameters)
POST JSON格式数据
Alamofire.request(.POST, "http://httpbin.org/post", parameters: parameters, encoding: .JSON(options: nil)) .responseJSON {(request, response, JSON, error) in println(JSON) }
Response 方法
response()responseString(encoding: NSStringEncoding)
responseJSON(options: NSJSONReadingOptions)
responsePropertyList(options: NSPropertyListReadOptions)
上传(Uploading)
支持的类型File
Data
Stream
Multipart (Coming Soon)
上传文件
let fileURL = NSBundle.mainBundle() .URLForResource("Default", withExtension: "png") Alamofire.upload(.POST, "http://httpbin.org/post", file: fileURL)
上传进度
Alamofire.upload(.POST, "http://httpbin.org/post", file: fileURL) .progress { (bytesWritten, totalBytesWritten, totalBytesExpectedToWrite) in println(totalBytesWritten) } .responseJSON { (request, response, JSON, error) in println(JSON) }
下载
支持的类型Request
Resume Data
下载文件
Alamofire.download(.GET, "http://httpbin.org/stream/100", destination: { (temporaryURL, response) in if let directoryURL = NSFileManager.defaultManager() .URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] as? NSURL { let pathComponent = response.suggestedFilename return directoryURL.URLByAppendingPathComponent(pathComponent) } return temporaryURL })
下载到默认路径
let destination = Alamofire.Request.suggestedDownloadDestination(directory: .DocumentDirectory, domain: .UserDomainMask) Alamofire.download(.GET, "http://httpbin.org/stream/100", destination: destination)
下载进度
Alamofire.download(.GET, "http://httpbin.org/stream/100", destination: destination) .progress { (bytesRead, totalBytesRead, totalBytesExpectedToRead) in println(totalBytesRead) } .response { (request, response, _, error) in println(response) }
认证(Authentication)
支持以下几种认证HTTP Basic
HTTP Digest
Kerberos
NTLM
Http basic认证
let user = "user" let password = "password" Alamofire.request(.GET, "https://httpbin.org/basic-auth/\(user)/\(password)") .authenticate(HTTPBasic: user, password: password) .response {(request, response, _, error) in println(response) }
采用NSURLCredential&NSURLProtectionSpace方式认证
let user = "user" let password = "password" let credential = NSURLCredential(user: user, password: password, persistence: .ForSession) let protectionSpace = NSURLProtectionSpace(host: "httpbin.org", port: 0, `protocol`: "https", realm: nil, authenticationMethod: NSURLAuthenticationMethodHTTPBasic) Alamofire.request(.GET, "https://httpbin.org/basic-auth/\(user)/\(password)") .authenticate(usingCredential: credential, forProtectionSpace: protectionSpace) .response {(request, response, _, error) in println(response) }
Printable
let request = Alamofire.request(.GET, "http://httpbin.org/ip") println(request) // GET http://httpbin.org/ip (200)
调试
let request = Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])
debugPrintln(request)
Output (cURL)
$ curl -i \ -H "User-Agent: Alamofire" \ -H "Accept-Encoding: Accept-Encoding: gzip;q=1.0,compress;q=0.5" \ -H "Accept-Language: en;q=1.0,fr;q=0.9,de;q=0.8,zh-Hans;q=0.7,zh-Hant;q=0.6,ja;q=0.5" \ "http://httpbin.org/get?foo=bar"
更多的用法将会在接口文档中一一列出,敬请期待。
Alamofire与AFNetworking是同一个作者
相关文章推荐
- asp.net mvc 5.0 借助路由规则实现*.aspx与HttpHandler交互
- android 缓存网络音频播放
- jason解析
- 黑马程序员-Java基础:网络编程
- Ubuntu 网卡桥接及桥接后网络不通的解决方法
- 网络编程学习之TCP客户端与服务器端
- TCP/IP协议三次握手与四次握手流程解析
- cisco 动态路由RIP配置
- HttpURLConnection 乱码
- http://www.cnblogs.com/dudu/archive/2011/03/05/asp_net_webform_mvc.html
- 在android用Get方式发送http请求
- iscsi网络存储LVM逻辑卷和RAID5卷
- 高性能、高并发、高扩展性和可读性的网络服务器架构:StateThreads
- 网络加载时Dialog
- win10无线网卡WIFI出现卡顿网络延迟高该怎么办?
- HTTP Content-type
- HTTP 权威指南 阅读笔记
- UNIX网络编程卷一:第二十六章 线程
- Windows Socket 网络编程——第五章 操作模式
- 你所不知道的TCP/IP传输层