SwiftUI에서 HTTP POST 요청후 JSON 응답 처리하는 기본 예제 입니다.
가독성 좋게 옵셔널은 Unwrapp 하였습니다.
JSON 형식으로 POST 요청 예제
import SwiftUI
import WebKit
struct IntroView: View {
var body: some View {
VStack {
}
.task() {
await startTask()
}
}
func startTask() async {
// 서버 사용자 정보 확인
let body: [String: Any] = ["userId": "test01", "authToken": "11111111111111"]
let jsonData = try? JSONSerialization.data(withJSONObject: body)
// HTTP 요청
let url = URL(string: Define.serverUrl + "/member/select.ajax")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue("\(String(describing: jsonData?.count))", forHTTPHeaderField: "Content-Length")
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = jsonData
// HTTP 요청 결과 처리
let dataTask = URLSession.shared.dataTask(with: request) {data, response, error in
// HTTP 응답코드가 400번대, 500번대의 경우 리턴
let httpResponse = response as! HTTPURLResponse
if httpResponse.statusCode >= 400 && httpResponse.statusCode <= 599 {
print(httpResponse.statusCode)
}
// HTTP 결과
let httpResponseJson = try! JSONDecoder().decode(HttpResponseJson.self, from: data!)
print(httpResponseJson.code)
print(httpResponseJson.msg)
print(httpResponseJson.data)
}
dataTask.resume()
}
}
// HTTP 응답 JSON에 맵핑되는 구조체
struct HttpResponseJson: Decodable {
let code: String
let msg: String
let data: String
}
URL 인코딩 형식으로 POST 요청 예제
import SwiftUI
import WebKit
struct IntroView: View {
var body: some View {
VStack {
}
.task() {
await startTask()
}
}
func startTask() async {
// 서버 사용자 정보 확인
var requestBodyComponents = URLComponents()
requestBodyComponents.queryItems = []
requestBodyComponents.queryItems?.append(URLQueryItem(name: "userId", value: "test01"))
requestBodyComponents.queryItems?.append(URLQueryItem(name: "authToken", value: "11111111111111"))
let body = requestBodyComponents.query?.data(using: .utf8)
// HTTP 요청
let url = URL(string: Define.serverUrl + "/member/select.ajax")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue("\(String(describing: body?.count))", forHTTPHeaderField: "Content-Length")
request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.httpBody = body
// HTTP 요청 결과 처리
let dataTask = URLSession.shared.dataTask(with: request) {data, response, error in
// HTTP 응답코드가 400번대, 500번대의 경우 리턴
let httpResponse = response as! HTTPURLResponse
if httpResponse.statusCode >= 400 && httpResponse.statusCode <= 599 {
print(httpResponse.statusCode)
}
// HTTP 결과
let httpResponseJson = try! JSONDecoder().decode(HttpResponseJson.self, from: data!)
print(httpResponseJson.code)
print(httpResponseJson.msg)
print(httpResponseJson.data)
}
dataTask.resume()
}
}
// HTTP 응답 JSON에 맵핑되는 구조체
struct HttpResponseJson: Decodable {
let code: String
let msg: String
let data: String
}
'개발 - iOS SwiftUI' 카테고리의 다른 글
iOS SwiftUI Firebase didRegisterForRemoteNotificationsWithDeviceToken 호출 안됨 (0) | 2023.10.23 |
---|---|
iOS SwiftUI Xcode Firebase 패키지 추가 방법 (0) | 2023.10.19 |
iOS SwiftUI onAppear에서 뷰 화면 이동 예제 (0) | 2023.10.18 |
iOS SwiftUI HTTP 요청 dataTask 동기 처리 예제 (0) | 2023.10.17 |
iOS SwiftUI HTTP GET 요청 후 JSON 응답 파싱 예제 (0) | 2023.10.16 |