Fire
Version
Author
Build Passing
Swift
Platforms
MIT
Cocoapods
Carthage
SPM
Fire is a delightful HTTP/HTTPS networking framework for iOS/macOS/watchOS/tvOS platform written in Swift and inspired by Python-Requests: HTTP for Humans.
Fire was written for humans to read, and incidentally, for machines to execute :)
- Chainable Request / Response Methods
- Upload File / Data / MultipartFormData
- HTTP Basic Authorization
- TLS Certificate and Public Key Pinning
- Comprehensive Unit and Integration Test Coverage
- Synchronously/Asynchronously Request
- Timeouts
- Custom Cache Policy
- form (
x-www-form-encoded)/JSON HTTP body
- iOS 8.0+
- macOS 10.10+
- watchOS 2.0+
- tvOS 9.0+
- Xcode 8 with Swift 3
pod 'Fire'
You are welcome to fork and submit pull requests.
Fire is open-sourced software, licensed under the MIT license.
To send a request with Fire, you need to do 3 steps.
First, build up a Fire object:
let f = Fire.build(HTTPMethod: .GET, url: "https://yourdomain.com/get?l=zh")
Then, config the Fire object:
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!") })
Finally, fire up:
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") }
If you want to cancel it:
// cancel: f.onCancel { print("Canceled") } f.cancel() // or: f.cancel { print("Canceled") }
Use Fire.Dispatch if you want to send requests synchronously:
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-encoded)/JSON HTTP 请求体
- iOS 8.0+
- macOS 10.10+
- watchOS 2.0+
- tvOS 9.0+
- Xcode 8 及 Swift 3
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 とは Swift で作られる iOS/macOS/watchOS/tvOSiプラットホーム HTTP/HTTPS の軽量なデータのインタネットフレームワーク(Internet-Framework)、Python-Requests:HTTP for Humans に深い影響を与えられた。
人を理解やすくなるために、作られました。たまたまにプログラムを実行できる。
- 連鎖されるリクエストとレスポンス のメソッド
- Upload file/data 可能
- HTTP Basic 認証をサポートしている
- SSL Pinning をサポートしている
- 全局と局部的なテスト可能
- 同期通信/非同期通信
- タイムアウト
- URLCachePolicy
- form (
x-www-form-encoded)/JSON HTTP 制式をサポートしている
- iOS 8.0 以上
- macOS 10.10 以上
- watchOS 2.0 以上
- tvOS 9.0 以上
- Xcode 8 / Swift 3 以上
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) } }