Net is a versatile HTTP networking library written in Swift.
- URL / JSON / Property List Parameter Encoding
- Upload File / Data / Stream / Multipart Form Data
- Download File using Request or Resume Data
- Authentication with URLCredential
- Basic, Bearer and Custom Authorization Handling
- Default and Custom Cache Controls
- Default and Custom Content Types
- Upload and Download Progress Closures with Progress (only iOS >= 11)
- cURL Command Debug Output
- Request and Response Interceptors
- Asynchronous and synchronous task execution
- Inference of response object type
- Network reachability
- TLS Certificate and Public Key Pinning
- Retry requests
- Codable / Decodable / Encodable protocols compatible (JSON / Property List)
- Customizable acceptable status codes range
- watchOS Compatible
- tvOS Compatible
- macOS Compatible
- Alamofire Implementation
- MoyaProvider Extension
- Kommander Extension
- RxSwift Extension
- Stub Implementation
- iOS 8.0+ / macOS 10.9+ / tvOS 9.0+ / watchOS 2.0+
- Xcode 9.0+
- Swift 4.0+
Net is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod'NetClient'For Swift 3 compatibility use:
pod'NetClient','~> 0.2'Or you can install it with Carthage:
github "intelygenz/NetClient-iOS"
Or install it with Swift Package Manager:
dependencies:[.package(url:"https://github.com/intelygenz/NetClient-iOS.git")]import Net
do{letrequest=tryNetRequest.builder("YOUR_URL")!
.setAccept(.json).setCache(.reloadIgnoringLocalCacheData).setMethod(.PATCH).setTimeout(20).setJSONBody(["foo","bar"]).setContentType(.json).setServiceType(.background).setCacheControls([.maxAge(500)]).setURLParameters(["foo":"bar"]).setAcceptEncodings([.gzip,.deflate]).setContentEncodings([.gzip]).setBasicAuthorization(user:"user", password:"password").setHeaders(["foo":"bar"]).build()}catch{print("Request error: \(error)")}import Net
letnet=NetURLSession()
net.data(URL(string:"YOUR_URL")!).async{(response, error)indo{iflet object:[AnyHashable:Any]=try response?.object(){print("Response dictionary: \(object)")}elseiflet error = error {print("Net error: \(error)")}}catch{print("Parse error: \(error)")}}import Net
letnet=NetURLSession()do{letobject:[AnyHashable:Any]=try net.data("YOUR_URL").sync().object()print("Response dictionary: \(object)")}catch{print("Error: \(error)")}import Net
letnet=NetURLSession()do{letobject:[AnyHashable:Any]=try net.data("YOUR_URL").cached().object()print("Response dictionary: \(object)")}catch{print("Error: \(error)")}import Net
letnet=NetURLSession()do{lettask=try net.data("YOUR_URL").progress({ progress inprint(progress)}).sync()}catch{print("Error: \(error)")}import Net
letnet=NetURLSession()
net.addRequestInterceptor{ request in
request.addHeader("foo", value:"bar")
request.setBearerAuthorization(token:"token")return request
}import Net
letnet=NetURLSession()
net.retryClosure ={ response, _, _ in response?.statusCode == XXX }do{lettask=try net.data("YOUR_URL").retry({ response, error, retryCount inreturn retryCount <2}).sync()}catch{print("Error: \(error)")}import Net
letrequest=NetRequest.builder("YOUR_URL")!
.setJSONObject(Encodable()).build()import Net
letnet=NetURLSession()do{letobject:Decodable=try net.data("YOUR_URL").sync().decode()print("Response object: \(object)")}catch{print("Error: \(error)")}Love Alamofire?
pod'NetClient/Alamofire'import Net
letnet=NetAlamofire()...Love Moya?
pod'NetClient/Moya'import Net
import Moya
letrequest=NetRequest("YOUR_URL")!
letprovider=MoyaProvider<NetRequest>()
provider.request(request){ result inswitch result {caselet.success(response):print("Response: \(response)")caselet.failure(error):print("Error: \(error)")}}Love Kommander?
pod'NetClient/Kommander'import Net
import Kommander
letnet=NetURLSession()letkommander=Kommander.default
net.data(URL(string:"YOUR_URL")!).execute(by: kommander, onSuccess:{ object inprint("Response dictionary: \(object as[AnyHashable:Any])")}){ error inprint("Error: \(String(describing: error?.localizedDescription))")}
net.data(URL(string:"YOUR_URL")!).executeDecoding(by: kommander, onSuccess:{ object inprint("Response object: \(object asDecodable)")}){ error inprint("Error: \(String(describing: error?.localizedDescription))")}Love RxSwift?
pod'NetClient/RxSwift'import Net
import RxSwift
letrequest=NetRequest("YOUR_URL")!
_ = net.data(request).rx.response().observeOn(MainScheduler.instance).subscribe{print($0)}Stub Implementation
pod'NetClient/Stub'import Net
letnet=NetStub()
net.asyncBehavior =.delayed(.main,.seconds(10)) // If you want to delay the response.
net.nextResult =.response(NetResponse.builder()....build())
// Your test request here
net.nextResult =.error(.net(code:500, message:"Your network error.", headers:..., object:..., underlying:...))
// Your test request here- Contributions are very welcome.
- Attribution is appreciated (let's spread the word!), but not mandatory.
alexruperez, alejandro.ruperez@intelygenz.com
Net is available under the MIT license. See the LICENSE file for more info.
