Awesome Open Source
Awesome Open Source

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

  • [x] Chainable Request / Response Methods
  • [x] Upload File / Data / MultipartFormData
  • [x] HTTP Basic Authorization
  • [x] TLS Certificate and Public Key Pinning
  • [x] Comprehensive Unit and Integration Test Coverage
  • [x] Synchronously/Asynchronously Request
  • [x] Timeouts
  • [x] Custom Cache Policy
  • [x] 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: "[email protected]#")
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 :)

  • [x]
  • [x]
  • [x] HTTP Basic
  • [x] SSL Pinning
  • [x]
  • [x] /
  • [x]
  • [x]
  • [x] 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: "[email protected]#")
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)

  • [x]
  • [x] Upload file/data
  • [x] HTTP Basic
  • [x] SSL Pinning
  • [x]
  • [x] /
  • [x]
  • [x] URLCachePolicy
  • [x] 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

MITLICENSE

@

()

//

  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: "[email protected]#")
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)
    }
}

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
Swift (94,836
Ios (19,011
Macos (8,707
Http (5,530
Network (3,584
Networking (2,586
Requests (1,968
Cocoapods (1,959
Osx (1,497
Mac (1,439
Https (1,099
Swift 3 (1,049
Swift 3 (1,049
Macosx (764
Tvos (716
Watchos (570
Fire (140
Related Projects