我想使用URLSession绕过HTTPS服务器请求。我有一个客观的C代码,并且运行良好。但是,当我将此代码转换为swift时,它不起作用。请检查并帮助我。我在代码中做错了什么?
// Objective C Code
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler
{
completionHandler(NSURLSessionAuthChallengeUseCredential, [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]);
}
// Swift Code
func urlSession(_ session: URLSession, task: URLSessionTask, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
if let aTrust = challenge.protectionSpace.serverTrust {
completionHandler(URLSession.AuthChallengeDisposition.useCredential, URLCredential(trust: aTrust))
}
}
答案 0 :(得分:0)
除了通常不是一个好主意(如果此代码最终出现在运输应用程序中,您将遇到一个非常严重的安全漏洞),这也会破坏您通过代理提出请求,破坏身份验证等的能力。只是不要这样做。
您可以从Let's Encrypt获得免费证书,因此,从不是使用自签名证书的有效理由,除非您要进行涉及未连接到Internet的自定义硬件的操作,即使是这样,禁用验证仍然不是远程执行验证的正确方法。
只需删除代码并安装免费证书即可。