2015-09-28 3 views
1

Я могу установить HTTP-соединение с сервером, используя следующую функцию.Открытый ключ в Swift 2

func isHostConnected(jsonString:NSDictionary, var retryCounter: Int) -> NSDictionary 
{ 

    let request = NSMutableURLRequest(URL: NSURL(string: "http://***.*.*.**:****/")!) 

    do { 
     request.HTTPBody = try NSJSONSerialization.dataWithJSONObject(jsonString, options: []) 
    } catch { 
     //error = error1 
     request.HTTPBody = nil 
    } 
    request.timeoutInterval = 45.0 //(number as! NSTimeInterval) 
    request.HTTPMethod = "POST" 
    request.setValue("application/json", forHTTPHeaderField: "Content-Type") 
    request.setValue("gzip", forHTTPHeaderField: "Accept-encoding") 

    var JSONdata: AnyObject = ["" : ""] as Dictionary<String, String> 
    //print(JSONdata) 

    if retryCounter == 0 { 
     JSONdata = ["0" : "0"] as Dictionary<String, String> 
     return (JSONdata) as! NSDictionary 
    } 
    retryCounter-- 

    let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration()) 
    var responseCode = -1 

    let group = dispatch_group_create() 
    dispatch_group_enter(group) 

    print("session.dataTaskWithRequest") 
    delayTimer(1.0){ 

     session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in 
      if let httpResponse = response as? NSHTTPURLResponse { 
       responseCode = httpResponse.statusCode 
       let JSONresdata: AnyObject = (try! NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers)) 
       JSONdata = JSONresdata as! NSDictionary 
      } 
      dispatch_group_leave(group) 
     }).resume() 
    } 

    dispatch_group_wait(group, DISPATCH_TIME_FOREVER) 
    print("responseCode == 200: \(responseCode)") 
    if responseCode != 200 { 
     print("retryCounter: \(retryCounter)") 
     self.isHostConnected(jsonString,retryCounter: retryCounter) 
    } 
    return (JSONdata) as! NSDictionary 
} 

В настоящее время в одной и той же функции, что мы хотим установить HTTPS соединение, где у меня есть самоподписанный сертификат. Я хочу знать, как реализовать публичный ключ, какие шаги мне нужно выполнить с моим самоподписанным сертификатом с написанием фрагмента кода.

Я искал в Интернете, но я не нашел ни одного примера или кода для этого в NSURLSession и swift 2. Пожалуйста, помогите мне с этим.

+0

Там уже ответ о том, как сделать это на SO здесь, я думаю: http://stackoverflow.com/questions/34223291/ios-certificate-pinning -с-быстроногий и-nsurlsession –

ответ

1

Следующий код может быть полезным: link

import UIKit 
import Foundation 
class ViewController: UIViewController, NSURLSessionDelegate { 

    override func viewDidLoad() { 
      super.viewDidLoad() 
     httpGet(NSMutableURLRequest(URL: NSURL(string: "https://example.com")!)) 
    } 

    func httpGet(request: NSMutableURLRequest!) { 


     let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration()) 
     session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in 


     }).resume() 
    } 


    func URLSession(session: NSURLSession, didReceiveChallenge challenge: NSURLAuthenticationChallenge, completionHandler: (NSURLSessionAuthChallengeDisposition, NSURLCredential?) -> Void) { 
    completionHandler(NSURLSessionAuthChallengeDisposition.UseCredential, NSURLCredential(forTrust: challenge.protectionSpace.serverTrust!)) 
    } 

} 
Смежные вопросы