Alamofire SessionDeinitialized & TLS Trust

在使用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)
})
}
}
作者

Nick Lin

發表於

2021-04-09

更新於

2023-01-18

許可協議


評論