介绍
这是什么?
Fire
是一个令人愉悦的适用于iOS/macOS/watchOS/tvOS平台的HTTP/HTTPS网络框架,由Swift编写,并受Python-Requests: HTTP for Humans的启发。
Fire是为了让人阅读而编写的,顺便也让机器执行:)
功能
- 链式请求/响应方法
- 上传文件/数据/多部分表单数据
- HTTP基本认证
- TLS证书和公钥固定
- 全面的单元和集成测试覆盖率
- 同步/异步请求
- 超时
- 自定义缓存策略
- 表单(
x-www-form-urlencoded
)/JSON HTTP正文
需求
- iOS 8.0+
- macOS 10.10+
- watchOS 2.0+
- tvOS 9.0+
- Xcode 8 with Swift 3
依赖关系
安装
CocoaPods
pod 'Fire'
贡献
欢迎您克隆项目并提交合并请求。
许可证
Fire
是开源软件,采用 MIT
许可证。
使用方法
使用 Fire
发送请求需要执行 3 个步骤。
首先,构建一个 Fire 对象
let f = Fire.build(HTTPMethod: .GET, url: "https://yourdomain.com/get?l=zh")
然后,配置 Fire 对象
f.setParams(["key": "value"])
f.setFiles([file])
f.setHTTPHeaders(["Accept": "application/json"])
f.setBasicAuth("user", password: "pwd!@#")
f.setHTTPBody(raw: Data)
let certData = NSData(contentsOfFile: NSBundle.mainBundle().pathForResource("FireDemo", ofType: "cer")!)!
f.setSSLPinning(localCertData: certData) {
print("Warning: Under Man-in-the-middle attack!!")
}
f.onError({ (resp, error) -> Void in
print("Error: Network offline!")
})
最后,开始发送
f.fire { (json, resp) -> Void in
print(json["arg"]["key"].stringValue)
}
// or
f.fireForJSON { (json, resp) -> Void in
print(json["arg"]["key"].stringValue)
}
// or
f.fireForString { (str, resp) -> Void in
print(str)
}
// or
f.fireForData { (data, resp) -> Void in
print("Success")
}
如果需要取消
// cancel:
f.onCancel {
print("Canceled")
}
f.cancel()
// or:
f.cancel {
print("Canceled")
}
如果需要同步发送请求,请使用 Fire.Dispatch
let f = Fire.build(HTTPMethod: .GET, url: api.stringValue, timeout: timeout, dispatch: .synchronously)
Fire.API
:
open class func FireAPI1() {
Fire.API.baseURL = FireDemo.BASEURL
let api = Fire.API(appending: "get.php", HTTPMethod: .GET, successCode: .success)
Fire.request(api: api, params: [:], timeout: 0, callback: { (json, resp) in
if let status = resp?.statusCode {
if status == api.successCode.rawValue {
// ...
}
}
}) { (error) in
print(error.localizedDescription)
}
}
open class func FireAPI2() {
Fire.API.baseURL = FireDemo.BASEURL
let api = Fire.API(appending: "get.php", HTTPMethod: .GET, successCode: .success)
api.requestJSON(params: ["user": "Elias"], callback: { (json, resp) in
if let status = resp?.statusCode {
if status == api.successCode.rawValue {
// ...
}
}
}) { (error) in
print(error.localizedDescription)
}
}
open class func FireAPI3() {
Fire.API.baseURL = FireDemo.BASEURL
let api = Fire.API(appending: "get.php", HTTPMethod: .GET, headers: ["Content-Type": "text/json"], successCode: .success)
api.requestJSON(params: ["userid": "1232"], headers: ["Device": "iOS"], timeout: 60, dispatch: .asynchronously, callback: { (json, resp) in
if let status = resp?.statusCode {
if status == api.successCode.rawValue {
// ...
}
}
}) { (error) in
print(error.localizedDescription)
}
}
中文介绍
这是什么?
Fire
是一个使用 Swift 编写的适用于 iOS/macOS/watchOS/tvOS 平台的轻量级 HTTP/HTTPS 网络框架,其深受 Python-Requests: HTTP for Humans 启发。
Fire 致力于更好的可读性而设计,而且还运行良好 :)
特性
- 链式调用的请求和响应方法
- 上传文件和数据
- 支持 HTTP Basic 认证
- 支持 SSL Pinning
- 全面的单元和集成测试覆盖
- 同步/异步请求
- 超时
- 自定义缓存策略
- 支持 form (
x-www-form-urlencoded
)/JSON HTTP 请求体
环境
- iOS 8.0+
- macOS 10.10+
- watchOS 2.0+
- tvOS 9.0+
- Xcode 8 及 Swift 3
依赖
安装
CocoaPods
pod 'Fire'
贡献
欢迎任何人为此贡献代码和问题。
协议
Fire 是一个开源软件,遵循 MIT 协议。
使用
要使用 Fire 发送请求,你只需要三个步骤。
首先,构建一个 Fire 实例
let f = Fire.build(HTTPMethod: .GET, url: "https://yourdomain.com/get?l=zh")
然后,进行一些配置
f.setParams(["key": "value"])
f.setFiles([file])
f.setHTTPHeaders(["Accept": "application/json"])
f.setBasicAuth("user", password: "pwd!@#")
f.setHTTPBody(raw: Data)
let certData = NSData(contentsOfFile: NSBundle.mainBundle().pathForResource("FireDemo", ofType: "cer")!)!
f.setSSLPinning(localCertData: certData) {
print("Warning: Under Man-in-the-middle attack!!")
}
f.onError({ (resp, error) -> Void in
print("Error: Network offline!")
})
最后,发起请求
f.fire { (json, resp) -> Void in
print(json["arg"]["key"].stringValue)
}
// or
f.fireForJSON { (json, resp) -> Void in
print(json["arg"]["key"].stringValue)
}
// or
f.fireForString { (str, resp) -> Void in
print(str)
}
// or
f.fireForData { (data, resp) -> Void in
print("Success")
}
如果你需要取消请求
// cancel:
f.onCancel {
print("Canceled")
}
f.cancel()
// or:
f.cancel {
print("Canceled")
}
如果你想发送同步请求, 请使用 Fire.Dispatch
let f = Fire.build(HTTPMethod: .GET, url: api.stringValue, timeout: timeout, dispatch: .synchronously)
Fire.API
:
open class func FireAPI1() {
Fire.API.baseURL = FireDemo.BASEURL
let api = Fire.API(appending: "get.php", HTTPMethod: .GET, successCode: .success)
Fire.request(api: api, params: [:], timeout: 0, callback: { (json, resp) in
if let status = resp?.statusCode {
if status == api.successCode.rawValue {
// ...
}
}
}) { (error) in
print(error.localizedDescription)
}
}
open class func FireAPI2() {
Fire.API.baseURL = FireDemo.BASEURL
let api = Fire.API(appending: "get.php", HTTPMethod: .GET, successCode: .success)
api.requestJSON(params: ["user": "Elias"], callback: { (json, resp) in
if let status = resp?.statusCode {
if status == api.successCode.rawValue {
// ...
}
}
}) { (error) in
print(error.localizedDescription)
}
}
open class func FireAPI3() {
Fire.API.baseURL = FireDemo.BASEURL
let api = Fire.API(appending: "get.php", HTTPMethod: .GET, headers: ["Content-Type": "text/json"], successCode: .success)
api.requestJSON(params: ["userid": "1232"], headers: ["Device": "iOS"], timeout: 60, dispatch: .asynchronously, callback: { (json, resp) in
if let status = resp?.statusCode {
if status == api.successCode.rawValue {
// ...
}
}
}) { (error) in
print(error.localizedDescription)
}
}
其他语言
Fire 是什么?
Fire
是用 Swift 编写的 iOS/macOS/watchOS/tvOS 平台上的轻量级数据互联网框架,深受 Python-Requests:HTTP for Humans 的影响。
为使人更容易理解而创建。可以意外地执行程序。
特性(Features)
- 可链式请求和响应方法
- 支持上传文件/数据
- 支持HTTP基本认证
- 支持SSL Pinning
- 支持全局和局部测试
- 支持同步通信/异步通信
- 支持超时
- 支持URLCachePolicy
- 支持form(
x-www-form-urlencoded
)/JSON HTTP格式
开发环境/运行环境
- iOS 8.0以上
- macOS 10.10以上
- watchOS 2.0以上
- tvOS 9.0以上
- Xcode 8 / Swift 3以上
安装
CocoaPods
CocoaPods
中安装库。
Podfile
pod 'Fire'
在项目目录中执行以下操作 pod install
许可证
包括相关仓库在内,所有内容均为MIT。有关详细信息,请查阅各个仓库中的LICENSE文件。
贡献指南、支持信息、注意事项
@渋谷の猫
(※准备中)
开发/构建方法/使用方法
Fire.build
let f = Fire.build(HTTPMethod: .GET, url: "https://yourdomain.com/get?l=zh")
set...
/add...
f.setParams(["key": "value"])
f.setFiles([file])
f.setHTTPHeaders(["Accept": "application/json"])
f.setBasicAuth("user", password: "pwd!@#")
f.setHTTPBody(raw: Data)
let certData = NSData(contentsOfFile: NSBundle.mainBundle().pathForResource("FireDemo", ofType: "cer")!)!
f.setSSLPinning(localCertData: certData) {
print("Warning: Under Man-in-the-middle attack!!")
}
f.onError({ (resp, error) -> Void in
print("Error: Network offline!")
})
fire { (...) in }
f.fire { (json, resp) -> Void in
print(json["arg"]["key"].stringValue)
}
// or
f.fireForJSON { (json, resp) -> Void in
print(json["arg"]["key"].stringValue)
}
// or
f.fireForString { (str, resp) -> Void in
print(str)
}
// or
f.fireForData { (data, resp) -> Void in
print("Success")
}
// cancel:
f.onCancel {
print("Canceled")
}
f.cancel()
// or:
f.cancel {
print("Canceled")
}
Fire.Dispatch
:
let f = Fire.build(HTTPMethod: .GET, url: api.stringValue, timeout: timeout, dispatch: .synchronously)
Fire.API
:
open class func FireAPI1() {
Fire.API.baseURL = FireDemo.BASEURL
let api = Fire.API(appending: "get.php", HTTPMethod: .GET, successCode: .success)
Fire.request(api: api, params: [:], timeout: 0, callback: { (json, resp) in
if let status = resp?.statusCode {
if status == api.successCode.rawValue {
// ...
}
}
}) { (error) in
print(error.localizedDescription)
}
}
open class func FireAPI2() {
Fire.API.baseURL = FireDemo.BASEURL
let api = Fire.API(appending: "get.php", HTTPMethod: .GET, successCode: .success)
api.requestJSON(params: ["user": "Elias"], callback: { (json, resp) in
if let status = resp?.statusCode {
if status == api.successCode.rawValue {
// ...
}
}
}) { (error) in
print(error.localizedDescription)
}
}
open class func FireAPI3() {
Fire.API.baseURL = FireDemo.BASEURL
let api = Fire.API(appending: "get.php", HTTPMethod: .GET, headers: ["Content-Type": "text/json"], successCode: .success)
api.requestJSON(params: ["userid": "1232"], headers: ["Device": "iOS"], timeout: 60, dispatch: .asynchronously, callback: { (json, resp) in
if let status = resp?.statusCode {
if status == api.successCode.rawValue {
// ...
}
}
}) { (error) in
print(error.localizedDescription)
}
}