logo

English

이곳의 프로그래밍관련 정보와 소스는 마음대로 활용하셔도 좋습니다. 다만 쓰시기 전에 통보 정도는 해주시는 것이 예의 일것 같습니다. 질문이나 오류 수정은 siseong@gmail.com 으로 주세요. 감사합니다.

[Swift 3] HTTP Request 사용하기, 클래스 소스코드 및 사용법

by digipine posted Nov 02, 2017
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print

Swift 3.0 으로 변하면서 NS라는 Prefix 명들이 모두 사라져서 깔끔해 진 느낌인데 여러가지로 API도 바뀌어서 매우 혼동이 됩니다.

그래서 특히 많이 사용하는 HTTP request를  정리해 보았습니다.

 

import Foundation

 

class Request {

    let session: URLSession = URLSession.shared

    

    // GET METHOD

    func get(url: URL, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) {

        var request: URLRequest = URLRequest(url: url)

        

        request.httpMethod = "GET"

        request.addValue("application/json", forHTTPHeaderField: "Accept")

        session.dataTask(with: request, completionHandler: completionHandler).resume()

    }

    

    // POST METHOD

    func post(url: URL, body: NSMutableDictionary, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) throws {

        var request: URLRequest = URLRequest(url: url)

        

        request.httpMethod = "POST"

        request.addValue("application/json", forHTTPHeaderField: "Content-Type")

        request.addValue("application/json", forHTTPHeaderField: "Accept")

        request.httpBody = try JSONSerialization.data(withJSONObject: body, options: JSONSerialization.WritingOptions.prettyPrinted)

        

        session.dataTask(with: request, completionHandler: completionHandler).resume()

    }

    

    // PUT METHOD

    func put(url: URL, body: NSMutableDictionary, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) throws {

        var request: URLRequest = URLRequest(url: url)

        

        request.httpMethod = "PUT"

        request.addValue("application/json", forHTTPHeaderField: "Content-Type")

        request.addValue("application/json", forHTTPHeaderField: "Accept")

        request.httpBody = try JSONSerialization.data(withJSONObject: body, options: JSONSerialization.WritingOptions.prettyPrinted)

        session.dataTask(with: request, completionHandler: completionHandler).resume()

    }

    

    // PATCH METHOD

    func patch(url: URL, body: NSMutableDictionary, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) throws {

        var request: URLRequest = URLRequest(url: url)

        

        request.httpMethod = "PATCH"

        request.addValue("application/json", forHTTPHeaderField: "Content-Type")

        request.addValue("application/json", forHTTPHeaderField: "Accept")

        request.httpBody = try JSONSerialization.data(withJSONObject: body, options: JSONSerialization.WritingOptions.prettyPrinted)

        session.dataTask(with: request, completionHandler: completionHandler).resume()

    }

    

    // DELETE METHOD

    func delete(url: URL, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) {

        var request: URLRequest = URLRequest(url: url)

        

        request.httpMethod = "DELETE"

        request.addValue("application/json", forHTTPHeaderField: "Accept")

        session.dataTask(with: request, completionHandler: completionHandler).resume()

    }

 

}

 


 

 

사용예

 

let request: Request = Request()

 

let url: URL = URL(string: "https://api.example.com/path/to/resource")!

let body: NSMutableDictionary = NSMutableDictionary()

body.setValue("value", forKey: "key")

 

try request.post(url: url, body: body, completionHandler: { data, response, error in

    // code

 

}) 

 
TAG •

List of Articles
No. Subject Author Date Views
» [Swift 3] HTTP Request 사용하기, 클래스 소스코드 및 사용법 digipine 2017.11.02 14248
23 [iOS, MacOS] NSArray 정렬 Sorting에 대해서 digipine 2017.11.02 5397
22 [iOS, MacOS] ATS 보안 정책 가이드 digipine 2017.11.02 4477
21 iOS - UILabel 에서 AttributeString 사용하기 digipine 2017.11.02 3703
20 iOS - sizeWithFont 메소드 deprecated와 sizeWithAttributes digipine 2017.11.02 4013
19 iOS - Sleep Mode Blocking 방법, 앱실행시 슬립모드 진입 방지 digipine 2017.11.01 3919
18 iOS , MacOS, iPhone용 GZipStream class 구현하기 digipine 2017.11.01 4318
17 iOS - View 이동 전환 하기 총정리 digipine 2017.11.01 3814
16 iOS - Openssl 빌드하기 digipine 2017.11.01 4418
15 iOS - Objective-C Callback for C++ digipine 2017.11.01 5860
14 iOS - NSString의 언어 인코딩 메소드 정리 digipine 2017.11.01 3655
13 iOS - Socket Nagle 알고리듬 OFF digipine 2017.11.01 3239
12 iOS - BSD Socket 네트워크 프로그래밍 digipine 2017.11.01 4026
11 iOS - 코드 수행시간 측정하기 - getTickCount digipine 2017.11.01 4045
10 iOS - Objective-C 남아있는 메모리 공간 확인 방법 digipine 2017.11.01 3424
9 iOS - Query string을 Decode 하는 소스 digipine 2017.11.01 4046
8 iOS - NSURLConnection로 다중 다운로드 구현 digipine 2017.11.01 3530
7 iOS - Thread Loop 내에서 UI 업데이트 방법 digipine 2017.11.01 3547
6 iOS - OpenURL으로 HTML에서 어플 실행 digipine 2017.11.01 3970
5 iOS - NSString 와 NSData 간의 데이터 상호 변환 digipine 2017.11.01 3966
Board Pagination Prev 1 2 Next
/ 2