在使用Alamofire library進行Https連接時,遇到了default TLS Trust evaluation failed 這個錯誤.
基本上看起來是無法取得憑證所導致的錯誤,但網站端所請求的並不是合法的憑證.
因此我們必須先透過ServerTrustManager來繞過憑證的驗證.
1 2 3 4 5 6 7 8 9 10 11
| class HttpManager: ObservableObject { func downloadCustomerIcon() { let url="https:xxx.xxx.xxx.xxx/test" let manager = ServerTrustManager(evaluators: ["xxx.xxx.xxx.xxx": DisabledTrustEvaluator()]) let session = Session(serverTrustManager: manager); session.request(requestStr, method: .get).responseJSON(completionHandler: { (completion) in print(completion.debugDescription) }) } }
|
使用此方式會得到Alamofire.AFError.sessionDeinitialized的錯誤,原因是Session還未完成請求時,已被程式關閉.
因為Https的請求是在非Main Thread執行,當開始請求時,已經離開func scope,所以session會被註銷所導致.
因此我們必須將seesion移到func外宣告,即可解決此錯誤.
1 2 3 4 5 6 7 8 9 10 11 12 13
| class HttpManager: ObservableObject { var session: Session? = nil;
func downloadCustomerIcon() { let url="https:xxx.xxx.xxx.xxx/test" let manager = ServerTrustManager(evaluators: ["xxx.xxx.xxx.xxx": DisabledTrustEvaluator()]) session = Session(serverTrustManager: manager); session!.request(requestStr, method: .get).responseJSON(completionHandler: { (completion) in print(completion.debugDescription) }) } }
|