我确定过去有过这方面的各种问题,但我花了整整一天寻找答案,但却找不到任何答案。我正在尝试将Google Translate API用于我正在构建的简单iOS应用。我本来坚持尝试使用SSL来处理这个请求。
根据Google Translate API, it supports SSL。所以现在我的问题是我怎么做到这一点?这是我现在正在尝试的一些代码。我有一个来自翻译API的API。
func translateRequest(text: String, fromLang: String, toLang: String) {
let httpsURL = NSURL(string: "https://www.googleapis.com/language/translate/v2?key=<MYAPIKEYHERE>&source=\(fromLang)&target=\(toLang)&q=\(text)&format=text")
let sessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration()
sessionConfiguration.timeoutIntervalForRequest = NSTimeInterval(10)
let session = NSURLSession(configuration: sessionConfiguration, delegate: self, delegateQueue: nil)
let translateTask = session.dataTaskWithURL(httpsURL!, completionHandler: completionHandlerTranslate)
translateTask.resume()
}
func completionHandlerTranslate(dataOpt: NSData?, responseOpt: NSURLResponse?, errorOpt: NSError?) {
// A helper function to do something with responses
}
现在,由于我使用的是NSURLSession
(而不是NSURLConnection
),我还在NSURLSessionDelegate
使用我的控制器。根据{{3}}(在“配置身份验证”部分中),NSURLSession
我只需要实现didReceiveChallenge
功能。该功能的签名是:
func URLSession(session: NSURLSession, didReceiveChallenge challenge: NSURLAuthenticationChallenge, completionHandler: (NSURLSessionAuthChallengeDisposition, NSURLCredential?) -> Void) {
}
但我不知道该怎么做。我已经看过许多人试图验证服务器等的例子,但我仍感到困惑。
以下是我的主要问题:
didReceiveChallenge
中我需要做什么才能在客户端和服务器之间进行加密通信?didReceiveChallenge
拒绝所有其他证书(例如放置像CharlesProxy这样的代理并尝试嗅探数据)?