Swift Ruby Objective-C
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
Assets
Fire
Sample
docs
.gitignore
.swift-version
Fire.podspec
LICENSE
README.md
_config.yml

README.md

Fire
Version Author Build Passing  Swift
Platforms MIT
Cocoapods Carthage SPM


Introduction

What's this?

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 :)

Features

  • 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

Requirements

  • iOS 8.0+
  • macOS 10.10+
  • watchOS 2.0+
  • tvOS 9.0+
  • Xcode 8 with Swift 3

Dependency

Installation

CocoaPods

pod 'Fire'

Contribution

You are welcome to fork and submit pull requests.

License

Fire is open-sourced software, licensed under the MIT license.

Usage

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

ä¾?èµ–

安装

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/tvOSiプラットホーム HTTP/HTTPS �軽��データ�インタ�ットフレームワーク(Internet-Framework)�Python-Requests:HTTP for Humans �深�影響を与�られ�。

人をç?†è§£ã‚„ã?™ã??ã?ªã‚‹ã?Ÿã‚?ã?«ã€?作られã?¾ã?—ã?Ÿã€‚ã?Ÿã?¾ã?Ÿã?¾ã?«ãƒ—ログラムを実行ã?§ã??る。

フィー�ャー(Features)

  • 連鎖ã?•れるリクエストã?¨ãƒ¬ã‚¹ãƒ?ンス ã?®ãƒ¡ã‚½ãƒƒãƒ‰
  • 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

CocoaPods �ライブラリをインストール���。

Podfile:

pod 'Fire'

プロジェクト�ディレクトリ内�以下を実行 pod install

ライセンス

関連ã?™ã‚‹ãƒªãƒ?ジトリå?«ã‚?ã€?ã?™ã?¹ã?¦MITã?§ã?™ã€‚詳細ã?¯å?„リãƒ?ジトリ内ã?®LICENSEã‚’ã?”覧ã??ã? ã?•ã?„。

貢献ガイド�サ�ート情報��留�事項

@渋谷�猫

(※準備中��)

開発/ビルド方法/使用方法

  1. Fire.build
let f = Fire.build(HTTPMethod: .GET, url: "https://yourdomain.com/get?l=zh")
  1. 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!")
})
  1. 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)
    }
}