반응형

URLSession 사용시 참고

개인적으로 http 통신을 할때 URLSession을 주로 사용한다.

주로 다음과 같이 사용한다.

let task = URLSession.shared.dataTask(with:request) {
 (data, response, error) in
 // 결과 처리 
}
task.resume()

간혹 URLSessionDelegate를 설정하고 받아서 처리해야 할때가 있다.

let session = URLSession(configuration: .default, delegate: self, delegateQueue: OperationQueue.main)
et task = session.dataTask(with:request) {
 (data, response, error) in
 // 결과 처리 
}
task.resume()

하지만 이때 일회성으로 사용할때에는 .default가 아니라 .ephemeral로 해줘야 한다.

let session = URLSession(configuration: .ephemeral, delegate: self, delegateQueue: OperationQueue.main)

또는 처리 후에 세션에 대해 finishTasksAndInvalidate()을 직접 호출해줘야 한다.

session.finishTasksAndInvalidate()

자세한 내용은 애플 문서에 나와있다.
https://developer.apple.com/reference/foundation/urlsession 문서 참조

중요
세션 객체는 앱이 종료되거나 명시적으로 세션을 무효화 하기 전까지 강한 참조를 유지한다. 세션을 무효화 하지 않으면, 앱을 종료할때까지 메모리 누수된다.


인증서가 유효하지 않은 서버(https) 접속하기

인증서가 유효하지 않은 서버(https)에 접속하게 되면 다음과 같은 error 메시지를 볼수 있다.

The certificate for this server is invalid. You might be connecting to a server that is pretending to be “서버주소” which could put your confidential information at risk.

이럴때 임의로 통과시켜 주기 위해서는 다음과 같이 URLSessionDelegate에서 작업을 해주면 된다.

extension HTTPManager: URLSessionDelegate {
    func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Swift.Void) {

        if challenge.previousFailureCount > 0 {
            completionHandler(.cancelAuthenticationChallenge, nil)
        } else if let serverTrust = challenge.protectionSpace.serverTrust {
            completionHandler(.useCredential, URLCredential(trust: serverTrust))
        } else {
            print("unknown state. error: \(challenge.error)")
            completionHandler(.performDefaultHandling, nil)
        }
    }
}


반응형

'iOS > Tip' 카테고리의 다른 글

WKWebView에서 Cookies 사용하기  (0) 2017.01.05
IndicatorView  (0) 2016.12.22
JavaScript to Native  (0) 2016.12.21
Autolayout 우선순위  (0) 2016.12.14
메모리 정보 가져오기  (0) 2016.11.30
현재 IP 가져오기  (0) 2016.11.29
Cookies 저장과 값 읽기  (0) 2016.11.28
UIView, UIWebView 캡쳐하기  (0) 2016.11.04
Posted by 까칠코더
,