Notice
Recent Posts
Recent Comments
Link
투케이2K
14. (ios/swift) http 통신 get , post , post body json 요청 실시 - URLSession 본문
IOS
14. (ios/swift) http 통신 get , post , post body json 요청 실시 - URLSession
투케이2K 2021. 10. 19. 22:14[개발 환경 설정]
개발 툴 : XCODE
개발 언어 : SWIFT
[방법 설명]
[소스 코드]
func requestGet() {
// [URL 지정 및 파라미터 값 지정 실시]
var urlComponents = URLComponents(string: "https://jsonplaceholder.typicode.com/posts?")
let paramQuery_1 = URLQueryItem(name: "userId", value: "1")
let paramQuery_2 = URLQueryItem(name: "id", value: "1")
urlComponents?.queryItems?.append(paramQuery_1) // 파라미터 지정
urlComponents?.queryItems?.append(paramQuery_2) // 파라미터 지정
// [http 통신 타입 및 헤더 지정 실시]
var requestURL = URLRequest(url: (urlComponents?.url)!)
requestURL.httpMethod = "GET" // GET
requestURL.addValue("application/x-www-form-urlencoded; charset=utf-8;", forHTTPHeaderField: "Content-Type") // GET
// [http 요쳥을 위한 URLSessionDataTask 생성]
print("")
print("====================================")
print("[requestGet : http get 요청 실시]")
print("url : ", requestURL)
print("====================================")
print("")
let dataTask = URLSession.shared.dataTask(with: requestURL) { (data, response, error) in
// [error가 존재하면 종료]
guard error == nil else {
print("")
print("====================================")
print("[requestGet : http get 요청 실패]")
print("fail : ", error?.localizedDescription ?? "")
print("====================================")
print("")
return
}
// [status 코드 체크 실시]
let successsRange = 200..<300
guard let statusCode = (response as? HTTPURLResponse)?.statusCode, successsRange.contains(statusCode)
else {
print("")
print("====================================")
print("[requestGet : http get 요청 에러]")
print("error : ", (response as? HTTPURLResponse)?.statusCode ?? 0)
print("msg : ", (response as? HTTPURLResponse)?.description ?? "")
print("====================================")
print("")
return
}
// [response 데이터 획득, utf8인코딩을 통해 string형태로 변환]
let resultCode = (response as? HTTPURLResponse)?.statusCode ?? 0
let resultLen = data! // 데이터 길이
let resultString = String(data: resultLen, encoding: .utf8) ?? "" // 응답 메시지
print("")
print("====================================")
print("[requestGet : http get 요청 성공]")
print("resultCode : ", resultCode)
print("resultLen : ", resultLen)
print("resultString : ", resultString)
print("====================================")
print("")
}
// network 통신 실행
dataTask.resume()
}
func requestPOST() {
// [URL 지정 및 파라미터 값 지정 실시]
var urlComponents = URLComponents(string: "https://jsonplaceholder.typicode.com/posts?")
let paramQuery_1 = URLQueryItem(name: "userId", value: "1")
let paramQuery_2 = URLQueryItem(name: "id", value: "1")
urlComponents?.queryItems?.append(paramQuery_1) // 파라미터 지정
urlComponents?.queryItems?.append(paramQuery_2) // 파라미터 지정
// [http 통신 타입 및 헤더 지정 실시]
var requestURL = URLRequest(url: (urlComponents?.url)!)
requestURL.httpMethod = "POST" // POST
requestURL.addValue("application/json", forHTTPHeaderField: "Content-Type") // POST
// [http 요쳥을 위한 URLSessionDataTask 생성]
print("")
print("====================================")
print("[requestPOST : http post 요청 실시]")
print("url : ", requestURL)
print("====================================")
print("")
let dataTask = URLSession.shared.dataTask(with: requestURL) { (data, response, error) in
// [error가 존재하면 종료]
guard error == nil else {
print("")
print("====================================")
print("[requestPOST : http post 요청 실패]")
print("fail : ", error?.localizedDescription ?? "")
print("====================================")
print("")
return
}
// [status 코드 체크 실시]
let successsRange = 200..<300
guard let statusCode = (response as? HTTPURLResponse)?.statusCode, successsRange.contains(statusCode)
else {
print("")
print("====================================")
print("[requestPOST : http post 요청 에러]")
print("error : ", (response as? HTTPURLResponse)?.statusCode ?? 0)
print("msg : ", (response as? HTTPURLResponse)?.description ?? "")
print("====================================")
print("")
return
}
// [response 데이터 획득, utf8인코딩을 통해 string형태로 변환]
let resultCode = (response as? HTTPURLResponse)?.statusCode ?? 0
let resultLen = data! // 데이터 길이
let resultString = String(data: resultLen, encoding: .utf8) ?? "" // 응답 메시지
print("")
print("====================================")
print("[requestPOST : http post 요청 성공]")
print("resultCode : ", resultCode)
print("resultLen : ", resultLen)
print("resultString : ", resultString)
print("====================================")
print("")
}
// network 통신 실행
dataTask.resume()
}
func requestPOST_BODY_JSON() {
// [URL 지정 및 파라미터 값 지정 실시]
let urlComponents = URLComponents(string: "https://jsonplaceholder.typicode.com/posts")
let dicData = ["userId":1, "id":1] as Dictionary<String, Any>? // 딕셔너리 사용해 json 데이터 만든다
let jsonData = try! JSONSerialization.data(withJSONObject: dicData!, options: [])
// [http 통신 타입 및 헤더 지정 실시]
var requestURL = URLRequest(url: (urlComponents?.url)!)
requestURL.httpMethod = "POST" // POST
requestURL.addValue("application/json", forHTTPHeaderField: "Content-Type") // POST
requestURL.httpBody = jsonData // Body 부분에 Json 데이터 삽입 실시
// [http 요쳥을 위한 URLSessionDataTask 생성]
print("")
print("====================================")
print("[requestPOST_BODY_JSON : http post body json 요청 실시]")
print("url : ", requestURL)
print("json : ", String(data: jsonData, encoding: .utf8) ?? "")
print("====================================")
print("")
let dataTask = URLSession.shared.dataTask(with: requestURL) { (data, response, error) in
// [error가 존재하면 종료]
guard error == nil else {
print("")
print("====================================")
print("[requestPOST_BODY_JSON : http post body json 요청 실패]")
print("fail : ", error?.localizedDescription ?? "")
print("====================================")
print("")
return
}
// [status 코드 체크 실시]
let successsRange = 200..<300
guard let statusCode = (response as? HTTPURLResponse)?.statusCode, successsRange.contains(statusCode)
else {
print("")
print("====================================")
print("[requestPOST_BODY_JSON : http post body json 요청 에러]")
print("error : ", (response as? HTTPURLResponse)?.statusCode ?? 0)
print("msg : ", (response as? HTTPURLResponse)?.description ?? "")
print("====================================")
print("")
return
}
// [response 데이터 획득, json 형태로 변환]
let resultCode = (response as? HTTPURLResponse)?.statusCode ?? 0
let resultLen = data! // 데이터 길이
do {
guard let jsonConvert = try JSONSerialization.jsonObject(with: data!) as? [String: Any] else {
print("")
print("====================================")
print("[requestPOST_BODY_JSON : http post body json 요청 에러]")
print("error : ", "json 형식 데이터 convert 에러")
print("====================================")
print("")
return
}
guard let JsonResponse = try? JSONSerialization.data(withJSONObject: jsonConvert, options: .prettyPrinted) else {
print("")
print("====================================")
print("[requestPOST_BODY_JSON : http post body json 요청 에러]")
print("error : ", "json 형식 데이터 변환 에러")
print("====================================")
print("")
return
}
guard let resultString = String(data: JsonResponse, encoding: .utf8) else {
print("Error: Couldn't print JSON in String")
print("")
print("====================================")
print("[requestPOST_BODY_JSON : http post body json 요청 에러]")
print("error : ", "json 형식 데이터 >> String 변환 에러")
print("====================================")
print("")
return
}
print("")
print("====================================")
print("[requestPOST_BODY_JSON : http post body json 요청 성공]")
print("resultCode : ", resultCode)
print("resultLen : ", resultLen)
print("resultString : ", resultString)
print("====================================")
print("")
} catch {
print("")
print("====================================")
print("[requestPOST_BODY_JSON : http post body json 요청 에러]")
print("error : ", "Trying to convert JSON data to string")
print("====================================")
print("")
return
}
}
// network 통신 실행
dataTask.resume()
}
[결과 출력]
반응형
'IOS' 카테고리의 다른 글
16. (ios/swift) 외부 앱 실행 및 앱 스토어 이동 실시 - 스키마 scheme (0) | 2021.10.21 |
---|---|
15. (ios/swift) 외부 링크 웹 사이트 이동 실시 - URL , SFSafariViewController (0) | 2021.10.20 |
13. (ios/swift) 실시간 비콘 beacon 신호 활성 실시 (0) | 2021.10.19 |
12. (ios/swift) 실시간 비콘 beacon 목록 스캔 실시 (4) | 2021.10.18 |
11. (ios/swift) 실시간 블루투스 목록 스캔 실시 - bluetooth scan (0) | 2021.10.17 |
Comments