我想用 Alamofire 庫做 ssl pinning,但它不適用于同步請求。
我正在使用以下庫來同步 Alamofire 請求: https ://github.com/Dalodd/Alamofire-Synchronous 在異步呼叫中,我使用代碼 -999 進行了取消,但是當我嘗試使用同步時,我得到所有回應為 200。我的代碼是像這樣:
let hostname = "..."
let cert = "..." // e.g. for cert.der, this should just be "cert"
let pathToCert = Bundle.main.path(forResource: cert, ofType: "der")
let localCertificate = NSData(contentsOfFile: pathToCert!)
let certificates = [SecCertificateCreateWithData(nil,
localCertificate!)!]
// Configure the trust policy manager
let serverTrustPolicy = ServerTrustPolicy.pinCertificates(
certificates: certificates,
validateCertificateChain: true,
validateHost: true
)
let serverTrustPolicies = [hostname: serverTrustPolicy]
let serverTrustPolicyManager = ServerTrustPolicyManager(policies:
serverTrustPolicies)
// Configure session manager with trust policy
let defaultManager = Alamofire.SessionManager(
configuration: URLSessionConfiguration.default,
serverTrustPolicyManager: serverTrustPolicyManager
)
let manager = defaultManager
manager.session.configuration.timeoutIntervalForRequest = 120
let request = getRequest(object, endPoint: endPoint)
let response = manager.request(request).responseString()
如果我不在下面的代碼中使用信號量,請求將被中止,但如果我使用它,我會得到 200 個回應
public func response<T: DataResponseSerializerProtocol>(responseSerializer: T) ->
DataResponse<T.SerializedObject> {
let semaphore = DispatchSemaphore(value: 0)
var result: DataResponse<T.SerializedObject>!
self.response(queue: DispatchQueue.global(qos: .default), responseSerializer: responseSerializer) { response in
result = response
semaphore.signal()
}
_ = semaphore.wait(timeout: DispatchTime.distantFuture)
return result
}
這怎么可能?
uj5u.com熱心網友回復:
不支持同步使用 Alamofire,因此您在執行此操作時看到的任何不當行為都不太可能得到修復。
此外,該依賴項使用的是 Alamofire 4,其中 5 是最新版本,所以如果你真的想要這種行為,我建議使用最新版本手動實作它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/476597.html
標籤:迅速 阿拉莫菲尔 alamofire 请求 sslpinning
上一篇:如何將可選Json決議為字串變數
