Swift: 将 SSL 密钥添加到 URLRequest
Swift: Adding SSL key to URLRequest
我正在尝试创建一个 URLRequest,但我需要向请求添加 SSL 密钥和密码,但我还没有找到如何完成此操作的任何示例。
这是我的要求:
func requestFactory(request:URLRequest, completion:@escaping (_ data:Data?)->Void){
let task = URLSession.shared.dataTask(with: request, completionHandler: { (data, urlRequestResponse, error) in
if error != nil{
completion(data)
}
})
task.resume()
}
非常感谢你的帮助。
Swift 4
假设您已经为自己购买了 SSL 证书,Google 如何在终端中使用 OpenSSL 将您的 SSL 捆绑证书(.crt 文件)转换为 .der 格式。找到您在文件系统中创建的 .der 文件并将其拖到 Xcode 中的项目文件夹中。接下来,转到您的项目根目录,在构建阶段下,单击下拉列表 'Copy Bundle Resources',然后单击 + 按钮将 .der 文件添加到资源列表。
接下来,您需要制作一个 class 来实现 URLSessionDelegate(在我的例子中,我将其称为 URLSessionPinningDelegate),当您制定 URLSession 调用时,您将作为委托传入此 class .
您应该查看如何实施 SSL 证书固定以获取有关如何实施此 class 的说明。这个网站 here 对如何做到这一点有一个完美而有效的解释。
下面是如何设置 session 和任务的示例。当您调用 request.setValue 时,密码将在 URLRequest 的 Header 中传递,因此也请查看该文档。一旦您弄清楚了 SSL 证书固定并设置了后端以验证您的用户密码并且还为您的 client-side 证书设置了信任,这应该会让您开始。
if let url = NSURL(string: "https://www.example.com") { // Your SSL server URL
var request = URLRequest(url: url as URL)
let password = "" // Your password value
request.setValue("Authorization", forHTTPHeaderField: password)
let session = URLSession(
configuration: URLSessionConfiguration.ephemeral,
delegate: URLSessionPinningDelegate(),
delegateQueue: nil)
添加 session 和请求参数后,您的代码将如下所示:
let task = session.dataTask(with: request, completionHandler: { (data, response, error) in
if error != nil {
print("error: \(error!.localizedDescription): \(error!)")
} else if data != nil {
if let str = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) {
print("Received data:\n\(str)")
} else {
print("Unable to convert data to text")
}
}
})
task.resume()
我正在尝试创建一个 URLRequest,但我需要向请求添加 SSL 密钥和密码,但我还没有找到如何完成此操作的任何示例。
这是我的要求:
func requestFactory(request:URLRequest, completion:@escaping (_ data:Data?)->Void){
let task = URLSession.shared.dataTask(with: request, completionHandler: { (data, urlRequestResponse, error) in
if error != nil{
completion(data)
}
})
task.resume()
}
非常感谢你的帮助。
Swift 4 假设您已经为自己购买了 SSL 证书,Google 如何在终端中使用 OpenSSL 将您的 SSL 捆绑证书(.crt 文件)转换为 .der 格式。找到您在文件系统中创建的 .der 文件并将其拖到 Xcode 中的项目文件夹中。接下来,转到您的项目根目录,在构建阶段下,单击下拉列表 'Copy Bundle Resources',然后单击 + 按钮将 .der 文件添加到资源列表。
接下来,您需要制作一个 class 来实现 URLSessionDelegate(在我的例子中,我将其称为 URLSessionPinningDelegate),当您制定 URLSession 调用时,您将作为委托传入此 class . 您应该查看如何实施 SSL 证书固定以获取有关如何实施此 class 的说明。这个网站 here 对如何做到这一点有一个完美而有效的解释。
下面是如何设置 session 和任务的示例。当您调用 request.setValue 时,密码将在 URLRequest 的 Header 中传递,因此也请查看该文档。一旦您弄清楚了 SSL 证书固定并设置了后端以验证您的用户密码并且还为您的 client-side 证书设置了信任,这应该会让您开始。
if let url = NSURL(string: "https://www.example.com") { // Your SSL server URL
var request = URLRequest(url: url as URL)
let password = "" // Your password value
request.setValue("Authorization", forHTTPHeaderField: password)
let session = URLSession(
configuration: URLSessionConfiguration.ephemeral,
delegate: URLSessionPinningDelegate(),
delegateQueue: nil)
添加 session 和请求参数后,您的代码将如下所示:
let task = session.dataTask(with: request, completionHandler: { (data, response, error) in
if error != nil {
print("error: \(error!.localizedDescription): \(error!)")
} else if data != nil {
if let str = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) {
print("Received data:\n\(str)")
} else {
print("Unable to convert data to text")
}
}
})
task.resume()