在Alamofire5上执行SSL固定?

时间:2019-07-19 10:16:50

标签: swift alamofire

我正在尝试使用Alamofire 5实施SSL固定,但在实施过程中遇到了问题。 我无法将AFsession.request称为方法:.post被视为额外参数。 我在下面附加了我的代码。

会话:

final class AFsession {
    let evaluators = [
        "mydomain.com":
            PinnedCertificatesTrustEvaluator(certificates: [
                Certificates.stackExchange
                ])
    ]
    let session: Session
    private init() {
        session = Session(
            serverTrustManager: ServerTrustManager(evaluators: evaluators)
        )
    }
    private static let shared = AFsession()

static func request(_ convertible: URLRequestConvertible) -> DataRequest {
        return shared.session.request(convertible)
    }
}


struct Certificates {
static let stackExchange =
    Certificates.certificate(filename: "mycert")

private static func certificate(filename: String) -> SecCertificate {
    let filePath = Bundle.main.path(forResource: filename, ofType: "cer")!
    let data = try! Data(contentsOf: URL(fileURLWithPath: filePath))
    let certificate = SecCertificateCreateWithData(nil, data as CFData)!

    return certificate
    }
}

实现:

AF.request(URL, method: .post, parameters: [:], encoding: body, headers: header)
        .responseString { response in
            guard response.result.error == nil else {
                // got an error in getting the data, need to handle it
                print("error calling POST on \(URL)")
                print(response.result.error!)
                return

请求参数中有错误。 method:.post被视为一个额外的参数。 编辑:使用AF.request的标准实现工作正常 感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您需要使用通过Session创建的ServerTrustManager进行请求,但不能与AF.request一起使用。