출처: 바로가기

Swift에서 GET, POST 로 HTTP 네트워크 정보 주고받기

GET으로 받아오기는 String(contentsOf: url!), POST로 전송은 URLSession.shared.dataTask(with: request){...}. 아래 코드는 Swift Playground에서 테스트 되었습니다.

import UIKit

// 메뉴 선택
let select = "delete"

do {
    
    func sendPost(paramText: String, urlString: String) {
        // paramText를 데이터 형태로 변환
        let paramData = paramText.data(using: .utf8)

        // URL 객체 정의
        let url = URL(string: urlString)

        // URL Request 객체 정의
        var request = URLRequest(url: url!)
        request.httpMethod = "POST"
        request.httpBody = paramData

        // HTTP 메시지 헤더
        request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
        request.setValue(String(paramData!.count), forHTTPHeaderField: "Content-Length")

        // URLSession 객체를 통해 전송, 응답값 처리
        let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
            
            // 서버가 응답이 없거나 통신이 실패
            if let e = error {
              NSLog("An error has occured: \(e.localizedDescription)")
              return
            }

            // 응답 처리 로직
            DispatchQueue.main.async() {
                // 서버로부터 응답된 스트링 표시
                let outputStr = String(data: data!, encoding: String.Encoding.utf8)
                print("result: \(outputStr!)")
            }
          
        }
        // POST 전송
        task.resume()
    }
    
    switch select {
    case "get":
        // GET 형태로 데이터 받기
        let url = URL(string: "http://localhost:8080/todo/get")
        let response = try String(contentsOf: url!)
        print(response)
        
    // insert, update, delete: POST 형태로 데이터 보낸 뒤 결과를 받음
    case "insert":
        // paramText 생성
        let icon = "clock"
        let title = "test_\(NSDate().timeIntervalSince1970)"
        let paramText = "icon=\(icon)&title=\(title)"
        
        sendPost(paramText: paramText, urlString: "http://localhost:8080/todo/insert")
        
    case "update":
        let id = 10
        let icon = "pencil"
        let title = "update_\(NSDate().timeIntervalSince1970)"
        let paramText = "id=\(id)&icon=\(icon)&title=\(title)"
        
        sendPost(paramText: paramText, urlString: "http://localhost:8080/todo/update")
        
    case "delete":
        let id = 8
        let paramText = "id=\(id)"
        
        sendPost(paramText: paramText, urlString: "http://localhost:8080/todo/delete")

    default:
        break
    }
    
} catch let e as NSError {
    print(e.localizedDescription)
}

 

문의 | 코멘트 또는 yoonbumtae@gmail.com


카테고리: Swift


0개의 댓글

답글 남기기

Avatar placeholder

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다