使用NSURLSession连接到具有无效证书的服务器(swift2,xcode7,ios
发布时间:2020-12-14 17:17:20 所属栏目:百科 来源:网络整理
导读:我正在使用 Xcode 7,Swift 2和iOS9.我想使用NSURLSession连接到Web服务,但是当我尝试连接时出现以下错误: 2015-10-13 16:07:33.595 XCTRunner[89220:4520715] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL,-9813)2015-10-13 16
我正在使用
Xcode 7,Swift 2和iOS9.我想使用NSURLSession连接到Web服务,但是当我尝试连接时出现以下错误:
2015-10-13 16:07:33.595 XCTRunner[89220:4520715] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL,-9813) 2015-10-13 16:07:33.604 XCTRunner[89220:4520571] Error with connection,details: Error Domain=NSURLErrorDomain Code=-1202 "The certificate for this server is invalid. You might be connecting to a server that is pretending to be “domainapi.com” which could put your confidential information at risk." UserInfo={NSURLErrorFailingURLPeerTrustErrorKey=<SecTrustRef: 0x7fac7b6facc0>,NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, 这是我的代码: func request( dataPost : String,successHandler: (response: String) -> Void)-> String { let destination:String = "https://domainapi.com:8743/WebService/sendData" let request = NSMutableURLRequest(URL: NSURL(string: destination as String)!) request.HTTPMethod = "POST" let postString = dataPost request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding) request.setValue("0",forHTTPHeaderField: "Content-Length") request.setValue("application/xml",forHTTPHeaderField: "Content-Type") request.setValue("gzip,deflate",forHTTPHeaderField: "Accept-Encoding") request.setValue("Keep-Alive",forHTTPHeaderField: "Connection") NSLog("Body is: %@",request.HTTPBody!) NSLog("Request is: %@",request.allHTTPHeaderFields!) NSLog("URL is: %@",destination) let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data,response,error in if error != nil { NSLog("Error with connection,details: %@",error!) return } let responseString = NSString(data: data!,encoding: NSUTF8StringEncoding) successHandler(response: responseString as String!); NSLog("Data received: %@",data!) } task.resume() return "worked" } func viewDidLoad() { let dataPost : String = "<webservices>xml data sending</webservices>" request(dataPost,successHandler: { (response) in let text = response print(text) }); 我已经研究过NSURLAuthenticationChallenge,但我似乎无法用我现有的代码来解决这个问题.所以我的问题是如何才能连接到服务器?我已经尝试将域添加到Info.plist中的NSAppTransportSecurity但是没有用.打开NSAllowsArbitraryLoads也不起作用.任何帮助,将不胜感激. 解决方法
请看一下这篇文章.7000,特别是有关自签名证书的部分.
你很可能需要表单的委托方法, func URLSession(session: NSURLSession,didReceiveChallenge challenge: NSURLAuthenticationChallenge,completionHandler: (NSURLSessionAuthChallengeDisposition,NSURLCredential?) -> Void) { completionHandler( .UseCredential,NSURLCredential(trust: challenge.protectionSpace.serverTrust!) ) } 将此添加到我自己的使用NSURLSession的comms类修复了该问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |