{"id":13396550,"url":"https://github.com/nghialv/Net","last_synced_at":"2025-03-13T23:31:35.312Z","repository":{"id":19659257,"uuid":"22912302","full_name":"nghialv/Net","owner":"nghialv","description":"Http Request wrapper written in Swift","archived":false,"fork":false,"pushed_at":"2015-10-15T06:05:10.000Z","size":17731,"stargazers_count":302,"open_issues_count":10,"forks_count":54,"subscribers_count":31,"default_branch":"master","last_synced_at":"2024-10-03T10:22:12.910Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nghialv.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-08-13T10:47:37.000Z","updated_at":"2024-06-20T00:34:03.000Z","dependencies_parsed_at":"2022-08-24T02:50:56.578Z","dependency_job_id":null,"html_url":"https://github.com/nghialv/Net","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nghialv%2FNet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nghialv%2FNet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nghialv%2FNet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nghialv%2FNet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nghialv","download_url":"https://codeload.github.com/nghialv/Net/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221057253,"owners_count":16748260,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-30T18:00:56.623Z","updated_at":"2024-10-25T11:30:55.729Z","avatar_url":"https://github.com/nghialv.png","language":"Swift","readme":"Net\n=====\nNet is a HttpRequest wrapper written in Swift\n\nFeatures\n-----\n- [x] GET, POST, PUT, DELETE method\n- [x] Powerful request params: nested params, number, string, dic, array, image, data\n- [x] Json, Image, Xml Response\n- [x] Download file: resume, suspend, cancel\n- [x] Upload file, data, params(multi-part)\n- [x] Progress closure\n- [x] Background donwload, upload\n- [x] Authentication\n- [x] Batch of operations\n- [x] BaseURL\n- [x] Customizable header\n\nDemo app\n-----\n![screenshot](https://dl.dropboxusercontent.com/u/8556646/screenshot2.png)\n\nUsage\n-----\nUse one of the following methods to create a Net instance\n\n```swift\n// without baseURL\nlet net = Net()\n\n// with baseURL\nlet net = Net(baseUrlString: \"http://www.puqiz.com/\") \n```\n\n### HttpRequest\n\n###### `GET` Request\n\n```swift\nlet url = \"get_path\"\nlet params = [\"integerNumber\": 1, \"doubleNumber\": 2.0, \"string\": \"hello\"]\n\nnet.GET(url, params: params, successHandler: { responseData in\n\t\tlet result = responseData.json(error: nil)\n\t\tNSLog(\"result \\(result)\")\n\t}, failureHandler: { error in\n\t\tNSLog(\"Error\")\n\t})\n\n// you can also make a request with absolute url\nlet url = \"http://www.puqiz.com/get_path\"\nnet.GET(absoluteUrl: url, params: params, successHandler: { responseData in\n\t\tlet result = responseData.json(error: nil)\n\t\tNSLog(\"result \\(result)\")\n\t}, failureHandler: { error in\n\t\tNSLog(\"Error\")\n\t})\n```\n\nYou can also use nested params\n\n```swift\n// nested params\nlet params = [\"string\": \"test\",\n            \"integerNumber\": 1,\n            \"floatNumber\": 1.5,\n            \"array\": [10, 20, 30],\n            \"dictionary\": [\"x\": 100.0, \"y\": 200.0],\n            \"image\": NetData(pngImage: img, filename: \"myIcon\")]\n```\n\nBy using responseData in sucessHandler closure you can quickly\n* get json dictionary\n* get image\n* parse xml\n\nfor GET, POST, PUT, DELETE request.\n\n```swift\n// get json dictionary from response data\nlet jsonDic = responseData.json(error: error)\n\n// get image from response data\nlet image = responseData.image()\n\n// parse xml with delegate\nlet result = responseData.parseXml(delegate: self)\n```\n\n###### `POST` Request\nNet will automatically check your params to send request as a URL-Encoded request or a Multi-Part request. So you can easily post with number, string, image or binary data.\n\n* URL-Encoded Request\n\n```swift\nlet url = \"post_path\"\nlet params = [\"string\": \"test\", \"integerNumber\": 1, \"floatNumber\": 1.5]\n        \nnet.POST(url, params: params, successHandler: { responseData in\n\t\tlet result = responseData.json(error: nil)\n\t\tNSLog(\"result: \\(result)\")\n\t}, failureHandler: { error in\n\t\tNSLog(\"Error\")\n\t})\n```\n\n* Multi-Part Request\n\n```swift\nlet url = \"post_path\"\nlet img = UIImage(named: \"puqiz_icon\")\n        \nlet params = [\"string\": \"test\", \"integerNumber\": 1,\n            \"icon\": NetData(pngImage: img, filename: \"myIcon\")]\n        \nnet.POST(url, params: params, successHandler: { responseData in\n\t\tlet result = responseData.json(error: nil)\n\t\tNSLog(\"result: \\(result)\")\n\t}, failureHandler: { error in\n\t\tNSLog(\"Error\")\n\t})\n```\n\n###### `PUT` Request\n```swift\nlet url = \"put_path\"\nlet params = [\"string\": \"test\", \"integerNumber\": 1, \"floatNumber\": 1.5]\n        \nnet.PUT(url, params: params, successHandler: { responseData in\n\t\tlet result = responseData.json(error: nil)\n\t\tNSLog(\"result: \\(result)\")\n\t}, failureHandler: { error in\n\t\tNSLog(\"Error\")\n\t})\n```\n\n###### `DELETE` Request\n```swift\nlet url = \"delete_path\"\nlet params = [\"id\": 10]\n        \nnet.DELETE(url, params: params, successHandler: { responseData in\n\t\tNSLog(\"result: \\(result)\")\n\t}, failureHandler: { error in\n\t\tNSLog(\"Error\")\n\t})\n```\n\n### Task\nBefore using download/upload function you have to call `setupSession` method to setup the session.\n\n```swift\n// setup session without backgroundIdentifier\nnet.setupSession()\n```\nTo perform background downloads or uploads, you have to call `setupSession` method with a background identifier string. Then your download/upload tasks can be run even when the app is suspended, exits or crashes. \n\n```swift\n// setup session with backgroundIdentifier\nnet.setupSession(backgroundIdentifier: \"com.nghialv.download\")\n\n// you can set eventsForBackgroundHandler closure\n// this closure will be invoked when a task is completed in the background\nnet.eventsForBackgroundHandler = { urlSession in\n\t\turlSession.getDownloadingTasksCount{ downloadingTaskCount in\n\t\tif downloadingTaskCount == 0 {\n\t\t\tNSLog(\"All files have been downloaded!\")\n\t\t}\n\t}\n}\n``` \n\n###### Download\n```swift\nlet downloadTask = net.download(absoluteUrl: url, progress: { progress in\n\t\tNSLog(\"progress \\(progress)\")\n\t}, completionHandler: { fileUrl, error in\n\t\tif error != nil {\n\t\t\tNSLog(\"Download failed\")\n\t\t}\n\t\telse {\n\t\t\tNSLog(\"Downloaded to  : \\(fileUrl)\")\n\t\t}\n\t})\n\n// you can control your task\ndownloadTask.resume()\ndownloadTask.suspend()\ndownloadTask.cancel()\n```\n\n###### Upload\n* Upload with file path\n\n```swift\nlet task = net.upload(absoluteUrl: url, fromFile: file, progressHandler: { progress in\n\t\tNSLog(\"progress \\(progress)\")\n\t}, completionHandler: { error in\n\t\tif error != nil {\n\t\t\tNSLog(\"Upload failed : \\(error)\")\n\t\t}\n\t\telse {\n\t\t\tNSLog(\"Upload completed\")\n\t\t}\n\t})\n```\n\n* Upload with data\n\n```swift\nlet yourData = NSData(...)\n        \nnet.upload(absoluteUrl: url, data: yourData, progressHandler: { progress in\n\t\tNSLog(\"progress: \\(progress)\")\n\t}, completionHandler: { error in\n\t\tNSLog(\"Upload completed\")\n\t})\n```\n\n* Upload with params\n\n```swift\nlet image = UIImage(named: \"image_file\")\nlet imageData = UIImagePNGRepresentation(image)\nlet params = [\"number\": 1, \"string\": \"net\", \"data\": imageData]\n\nnet.upload(absoluteUrl: imgUrl, params: params, progressHandler: { progress in\n\t\tNSLog(\"progress: \\(progress)\")\n\t}, completionHandler: { error in\n\t\tNSLog(\"Upload completed\")\n\t})\n```\nBy default, the upload task will be performed as POST method and \n\n* `Content-Type` = `application/octet-stream` (upload with file or data)\n* `Content-Type` = `multipart/form-data` (upload with params)\n\nBut you can configure the upload task before resuming.\n\n```swift\n// set method\nyourUploadTask.setHttpMethod(.PUT)\n\n// set header field\nyourUploadTask.setValue(value: \"your_value\", forHttpHeaderField: \"header_field\")\n```\n\nIntegration\n-----\nJust drag Net folder to the project tree\n","funding_links":[],"categories":["HTTP","Libs","Programming Languages"],"sub_categories":["Network","Swift"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnghialv%2FNet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnghialv%2FNet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnghialv%2FNet/lists"}