투케이2K

199. (ios/swift) [간단 소스] URLError 사용해 URLSession http 요청 시 timedOut 타임 아웃 에러 타입 체크 방법 본문

IOS

199. (ios/swift) [간단 소스] URLError 사용해 URLSession http 요청 시 timedOut 타임 아웃 에러 타입 체크 방법

투케이2K 2022. 9. 16. 13:14
반응형

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT

 

[소스 코드]

            let dataTask = session.dataTask(with: requestURL, completionHandler: { (data, response, error) in

                // [error가 존재하면 종료]
                guard error == nil else {
                    print("")
                    print("===============================")
                    print("[C_Cache_Clear_Check >> checker() :: http 통신 캐시 초기화 요청 실패]")
                    print("-------------------------------")
                    print("주 소 :: ", requestURL)
                    print("-------------------------------")
                    print("fail :: ", error?.localizedDescription ?? "")
                    print("===============================")
                    print("")
                    

                    if (error as? URLError)?.code == .timedOut { // [커넥션 타임 아웃 체크]
                        print("")
                        print("===============================")
                        print("[C_Cache_Clear_Check >> checker() :: http 통신 커넥션 타임 아웃 발생]")
                        print("===============================")
                        print("")
                        
                        // [콜백 반환]
                        completion(false, error?.localizedDescription ?? "")
                        return
                    }
                    else {
                        // [콜백 반환]
                        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_Cache_Clear_Check >> checker() :: 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_Cache_Clear_Check >> checker() :: http 통신 응답 확인 실시]")
                print("===============================")
                print("")


            })

            // [network 통신 실행]
            dataTask.resume()

 

반응형
Comments