Se connecter à un Serveur avec un Certificat non Valide à l'aide de NSURLSession (swift2,xcode7,ios9)
Je suis en utilisant Xcode 7, Swift 2, et iOS9. Je veux me connecter à un service web à l'aide de NSURLSession mais je reçois le message d'erreur suivant lorsque j'essaie de me connecter:
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?,
Voici mon code:
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)
});
J'ai regardé dans NSURLAuthenticationChallenge
mais je n'arrive pas à comprendre qu'avec le code que j'ai actuellement en place. Donc ma question est comment puis-je me connecter au serveur de toute façon? J'ai déjà essayé d'ajouter le domaine à mon NSAppTransportSecurity
en Info.plist mais cela ne fonctionne pas. Tournant sur NSAllowsArbitraryLoads
ne fonctionne pas non plus. Toute aide serait appréciée.
Découvrez cette question DONC: stackoverflow.com/questions/933331/...
c'est à l'aide de NSURLConnection qui est obsolète dans iOS8. Je voudrais utiliser NSURLSession si possible.
Le AFNetworking bibliothèque offre un excellent support pour cela, je vous recommande de le vérifier.
c'est à l'aide de NSURLConnection qui est obsolète dans iOS8. Je voudrais utiliser NSURLSession si possible.
Le AFNetworking bibliothèque offre un excellent support pour cela, je vous recommande de le vérifier.
OriginalL'auteur cakes88 | 2015-10-14
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil à cet article.De la livraison d'une Application Avec l'Application de la Sécurité des Transports en particulier les sections sur les certificats auto-signés.
Vous aurez besoin probablement la méthode du délégué de la forme,
En ajoutant ceci à mon propre comms classe qui utilise NSURLSession résolu le problème.
j'ai ajouté délégué, mais cette méthode ne s'est jamais appelé à swift 3, toutes les autres solutions, sans l'aide de alamofire ou de tout autre lib?
OriginalL'auteur FractalDoctor
Lors de la création de la Session d'URL, utiliser l'initialiseur, qui définit le délégué de la configuration, comme ci-dessous:
Ensuite, de mettre en œuvre le délégué suivant la méthode, il devrait fonctionner.
Cependant, il est très important de noter, que c'est un problème de sécurité, et nous ne devrions pas être en train d'essayer de se connecter à des serveurs avec des certificats non valides.
OriginalL'auteur Debaditya Sarkar
ouvrir votre info.plist comme un code source
Ajoutez ce qui suit:
Cela devrait aider.
pas de travaux mec.
NSAllowsArbitaryLoads clé lorsque la valeur true permet d'accéder à tout sans garantie d'Url. Quel est donc le point d'avoir des fichier CER pour la sécurité?
OriginalL'auteur Marcelo Pontes Machado
Pour SWIFT 4:
OriginalL'auteur kiran kumar