2016-03-19 5 views
1

Hallo Ich möchte Https Request in Swift machen. Momentan im Zugriff auf den lokalen Server über die IP-Adresse. Der lokale Server verfügt über ein SSL-Zertifikat, indem er auf das Zertifikat zugreift, das derzeit eine Anfrage an den Server senden möchte.Swift: Wie man Https Anfrage mit Server SSL-Zertifikat

Alamofire.request(.GET, https://ipaddress//, parameters: [param], headers: headers) 
     .responseJSON { response in 
      print(response.request) // original URL request 
      print(response.response) // URL response 
      print(response.data)  // server data 
      print(response.result) // result of response serialization 

      if let JSON = response.result.value { 
       print("JSON: \(JSON)") 


      } 
    } 

Ich habe den obigen Code für die Herstellung von Anforderung und in plist verwendet

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSExceptionDomains</key> 
    <dict> 
     <key>192.168.2.223:1021(my local ip)</key> 
     <dict> 
     Include to allow subdomains--> 
      <key>NSIncludesSubdomains</key> 
      <true/> 
      <!--Include to allow insecure HTTP requests--> 
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> 
      <true/> 
      <!--Include to specify minimum TLS version--> 
      <key>NSTemporaryExceptionMinimumTLSVersion</key> 
      <string>TLSv1.1</string> 
     </dict> 
    </dict> 
</dict> 

in plist i wie dieses gegeben haben, aber ich bin immer noch Fehler immer wie

NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813) 
+0

Sie können keine IP-Adressen in den ATS-Plist-Werten verwenden. –

+0

Haben Sie eine Lösung bekommen? –

Antwort

4

WICHTIG: NICHT BENUTZEN SIE DIESE PRODUKTION. Grundsätzlich können Sie mit Alamofire die Authentifizierung für App-Entwicklung und Testzwecke umgehen. Stellen Sie sicher, dass Sie es entfernen, bevor sich die App im App Store oder in der Produktion befindet: -

func bypassURLAuthentication() { 
     let manager = Alamofire.Manager.sharedInstance 
     manager.delegate.sessionDidReceiveChallenge = { session, challenge in 
      var disposition: NSURLSessionAuthChallengeDisposition = .PerformDefaultHandling 
      var credential: NSURLCredential? 
      if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust { 
       disposition = NSURLSessionAuthChallengeDisposition.UseCredential 
       credential = NSURLCredential(forTrust: challenge.protectionSpace.serverTrust!) 
      } else { 
       if challenge.previousFailureCount > 0 { 
        disposition = .CancelAuthenticationChallenge 
       } else { 
        credential = manager.session.configuration.URLCredentialStorage?.defaultCredentialForProtectionSpace(challenge.protectionSpace) 
        if credential != nil { 
         disposition = .UseCredential 
        } 
       } 
      } 
      return (disposition, credential) 
     } 
    } 

Vielen Dank! Lassen Sie mich wissen, ob dies hilft. :)