Notice
Recent Posts
Recent Comments
Link
투케이2K
162. (ios/swift) URLSession 사용해 http 통신 비동기 (Async) 요청 및 응답 결과 콜백 (callback) 확인 실시 본문
IOS
162. (ios/swift) URLSession 사용해 http 통신 비동기 (Async) 요청 및 응답 결과 콜백 (callback) 확인 실시
투케이2K 2022. 7. 21. 17:51[개발 환경 설정]
개발 툴 : XCODE
개발 언어 : SWIFT
[소스 코드]
// MARK: - [비동기 http 통신 요청 수행 실시]
func callHttpAsync(reqUrl : String, completion: @escaping (Bool, String)->()) {
/*
// -----------------------------------------
[callHttpAsync 메소드 설명]
// -----------------------------------------
1. 비동기 http 통신 수행 및 리턴 결과 콜백 반환 실시
// -----------------------------------------
2. 호출 방법 :
self.callHttpAsync(reqUrl: "http://jsonplaceholder.typicode.com/posts?userId=1&id=1"){(result, msg) in
print("")
print("====================================")
print("[A_Main >> callHttpAsync() :: 비동기 http 통신 콜백 확인]")
print("result :: ", result)
print("msg :: ", msg)
print("====================================")
print("")
}
// -----------------------------------------
3. 사전 설정 사항 :
- 필요 info plist 설정
[1] http 허용 : App Transport Security Settings >> Allow Arbitrary Loads >> YES
// -----------------------------------------
*/
// [http 비동기 방식을 사용해서 http 요청 수행 실시]
let urlComponents = URLComponents(string: reqUrl)
var requestURL = URLRequest(url: (urlComponents?.url)!)
requestURL.httpMethod = "GET" // GET
requestURL.addValue("application/x-www-form-urlencoded; charset=utf-8;", forHTTPHeaderField: "Content-Type") // header settings
print("")
print("====================================")
print("[C_Util >> callHttpAsync() :: http 통신 요청 실시]")
print("-------------------------------")
print("주 소 :: ", requestURL)
print("====================================")
print("")
// [http 요쳥을 위한 URLSessionDataTask 생성]
let dataTask = URLSession.shared.dataTask(with: requestURL, completionHandler: { (data, response, error) in
// [error가 존재하면 종료]
guard error == nil else {
print("")
print("====================================")
print("[C_Util >> callHttpAsync() :: http 통신 요청 실패]")
print("-------------------------------")
print("주 소 :: ", requestURL)
print("-------------------------------")
print("fail :: ", error?.localizedDescription ?? "")
print("====================================")
print("")
// [콜백 반환]
completion(false, error?.localizedDescription ?? "")
return
}
// [status 코드 체크 실시]
let successsRange = 200..<300
guard let statusCode = (response as? HTTPURLResponse)?.statusCode, successsRange.contains(statusCode)
else {
print("")
print("====================================")
print("[C_Util >> callHttpAsync() :: http 통신 요청 에러]")
print("-------------------------------")
print("주 소 :: ", requestURL)
print("-------------------------------")
print("error :: ", (response as? HTTPURLResponse)?.statusCode ?? 0)
print("-------------------------------")
print("msg :: ", (response as? HTTPURLResponse)?.description ?? "")
print("====================================")
print("")
// [콜백 반환]
completion(false, (response as? HTTPURLResponse)?.description ?? "")
return
}
// [response 데이터 획득]
let resultCode = (response as? HTTPURLResponse)?.statusCode ?? 0 // [상태 코드]
let resultLen = data! // [데이터 길이]
let resultData = String(data: resultLen, encoding: .utf8) ?? "" // [데이터 확인]
print("")
print("====================================")
print("[C_Util >> callHttpAsync() :: http 통신 성공]")
print("-------------------------------")
print("주 소 :: ", requestURL)
print("-------------------------------")
print("resultCode :: ", resultCode)
print("-------------------------------")
print("resultLen :: ", resultLen)
print("-------------------------------")
print("resultData :: ", resultData)
print("====================================")
print("")
// [콜백 반환]
completion(true, resultData)
})
// [network 통신 실행]
dataTask.resume()
}
[결과 출력]
반응형
'IOS' 카테고리의 다른 글
164. (ios/swift) Xcode 에서 시뮬레이터 (simulator) 디바이스 화면 캡쳐 수행 방법 (0) | 2022.08.03 |
---|---|
163. (ios/swift) 앱 스토어 배포 리젝 시 빌드 (build) 버전 업데이트 및 재업로드 요청 방법 (0) | 2022.08.02 |
161. (ios/swift) 파일 매니저 (FileManager) , http 통신 사용해 웹뷰에서 파일 다운로드 수행 실시 (0) | 2022.07.21 |
160. (ios/swift) Xcode 사용해 무선 와이파이 (wifi) 디버깅 수행 방법 (0) | 2022.07.19 |
159. (ios/swift) Xcode 사용해 모바일 디바이스 화면 사이즈 크기 구분 방법 - 6.5 형 및 5.5 형 (0) | 2022.07.19 |
Comments