나의 플랫폼/iOS
[iOS][Alamofire] NSURLSession/NSURLConnection HTTP load failed
GsBOB
2017. 6. 15. 16:37
Https 도메인을 연결하기 위해선 SSL 인증이 필요하다.
이를 제대로 설정 하지 않으면 아래 와 같은 이슈를 보게 되는데요.
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9843
참고로 -9843 에러가 어떤 에러 인지 알고 싶으신 분들은 아래 사이트 들어가보시면 됩니다.
에러 번호 별로 설명이 되어 있습니다.
위 에러가 발생하면 맨 처음 plist에서 설정을 변경 합니다.
아래 내용을 참고 하시면 되겠습니다.
2개의 방법이 있는데,
전체의 HTTP를 허용하는 방법과 도메인마다 설정해서 허용하는 방법이 있습니다.
1. 전체의 HTTP를 허용하는 방법(비추천이라고 합니다)
<key> NSAppTransportSecurity </ key> <dict> <key> NSAllowsArbitraryLoads </ key> <true /> </ dict>
2. ATS를 제외시킬 도메인을 Info.plist에 기재하는 방법
<key> NSAppTransportSecurity </ key> <dict> <key> NSExceptionDomains </ key> <dict> <key> www.xxx.com </ key> <dict> <key> NSTemporaryExceptionAllowsInsecureHTTPLoads </ key> <true /> </ dict> </ dict> </ dict>
만약!!!
저렇게 설정 했는데도 되지 않으신 분들은 아래와 같이 수정해 보세요.
참고로 이 수정 부분은 Alamofire Library를 사용 하시는 분만 참고 하시면 되겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | private static var Manager: Alamofire.SessionManager = { let serverTrustPolicies: [String: ServerTrustPolicy] = [ "제외 시키고자 하는 URL": .disableEvaluation ] let manager = Alamofire.SessionManager( configuration: URLSessionConfiguration.default, delegate: SessionDelegate(), serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies) ) return manager }() request = Manager.request(URL) .responseJSON { response in } | cs |
위 소스에서 Manager.request가 원래 Alamofire.request 였을 겁니다.
위와 같이 제외 시키고자 하는 URL을 넣으시고,
Manager 로써 request를 호출 하면 해당 URL은 SSL인증에서 제외 됩니다.
참고하세요.
참고로 Alamofire 는 4.4버전 입니다.