Skip to content
master
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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)
    }
}
You can’t perform that action at this time.