투케이2K

85. (swift/xcode) URLSession 사용해 connectionTimeOut 커넥션 타임 아웃 시간 지정 및 responseHeader 데이터 확인 본문

Swift

85. (swift/xcode) URLSession 사용해 connectionTimeOut 커넥션 타임 아웃 시간 지정 및 responseHeader 데이터 확인

투케이2K 2022. 8. 14. 21:55

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT

 

[소스 코드]

            // [http 비동기 방식을 사용해서 파일 다운로드 및 저장 수행 실시]
            var urlComponents = URLComponents(string: fileUrl)
            var requestURL = URLRequest(url: (urlComponents?.url)!)
            requestURL.httpMethod = "GET" // GET
            requestURL.addValue("application/x-www-form-urlencoded; charset=utf-8;", forHTTPHeaderField: "Content-Type") // GET
            print("")
            print("===============================")
            print("[C_Util >> submitDownloadFile() :: http 통신 요청 실시]")
            print("-------------------------------")
            print("주 소 :: ", requestURL)
            print("===============================")
            print("")
            
            
            // [http 요쳥을 위한 URLSessionDataTask 생성]
            let sessionConfig = URLSessionConfiguration.default
            sessionConfig.timeoutIntervalForRequest = 10.0 // [커넥션 타임 아웃 설정]
            let session = URLSession(configuration: sessionConfig)
            
            let dataTask = session.dataTask(with: requestURL, completionHandler: { (data, response, error) in

                // [error가 존재하면 종료]
                guard error == nil else {
                    print("")
                    print("===============================")
                    print("[C_Util >> submitDownloadFile() :: http 통신 요청 실패]")
                    print("-------------------------------")
                    print("주 소 :: ", requestURL)
                    print("-------------------------------")
                    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("[C_Util >> submitDownloadFile() :: http 통신 요청 에러]")
                    print("-------------------------------")
                    print("주 소 :: ", requestURL)
                    print("-------------------------------")
                    print("error :: ", (response as? HTTPURLResponse)?.statusCode ?? 0)
                    print("-------------------------------")
                    print("msg :: ", (response as? HTTPURLResponse)?.description ?? "")
                    print("===============================")
                    print("")
                    return
                }

                
                // [response 데이터 획득]
                let resultHeader : [AnyHashable : Any] = (response as? HTTPURLResponse)!.allHeaderFields
                let resultDic = resultHeader as! [String: Any]
                let resultCode = (response as? HTTPURLResponse)?.statusCode ?? 0
                let resultLen = data! // 데이터 길이
                
                
                print("")
                print("===============================")
                print("[C_Util >> submitDownloadFile() :: http 통신 성공]")
                print("-------------------------------")
                print("주 소 :: ", requestURL)
                print("-------------------------------")
                print("responseHeader :: ", resultDic.description)
                print("-------------------------------")
                print("headerKey :: ", resultDic.keys.description)
                print("-------------------------------")
                print("resultCode :: ", resultCode)
                print("===============================")
                print("")
            })

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

 

반응형
Comments