2016-11-22 3 views
0

Ich habe NSMutableURLRequest für eine lange Zeit verwendet, um eine Verbindung zu meinem Server herzustellen.Warum bekomme ich beim Wechseln zu HTTPS authenticationchallenge mit NSURLRequest?

Um eine Doppelroadtrips zu vermeiden, habe ich das usr/PWD direkt in der Kopfzeile wie folgt aus:

NSMutableURLRequest *request = [NSMutableURLRequest 
      requestWithURL:[NSURL URLWithString:url] 
       cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:HTTP_REQUEST_TIMEOUT]; 
NSString *authStr = [NSString stringWithFormat:@"%@:%@", inUsr, inPwd]; 
NSString *authValue = [NSString stringWithFormat:@"Basic %@", [[authStr dataUsingEncoding:NSISOLatin1StringEncoding] base64EncodedStringWithOptions:0]]; 

[request setValue:authValue forHTTPHeaderField:@"Authorization"]; 

Dieses feine gearbeitet hat, wird die „willSendRequestForAuthenticationChallenge“ genannt nie, es sei denn es ein Fehler ist , so dass Verfahren ist schon immer aussah:

- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {   
    NSDictionary *errorInfo = ((NSHTTPURLResponse *) challenge.failureResponse).allHeaderFields; 

    NSError *error; = [NSError errorWithDomain:@"httprequesthandler" code:WRONG_CREDENTIALS userInfo:errorInfo]; 
    [delegate finishedWithErrors:error]; 

Nun aber bin ich mit der gleichen URL wie immer, nur „https“ statt „http“, und plötzlich diese Methode wird jedes Mal aufgerufen.

Ich möchte meine Anfrage wie normal arbeiten, d. H. Grundlegende Header und nur eine Anfrage an den Server auffüllen.

Ich bin mir nicht sicher, was ich vermisse, also würden Zeiger sehr geschätzt werden!

Antwort

0

Verwenden Sie https als Ihr Schema (oder Protokoll) erfordert die Verbindung sicher gemacht werden, sowohl durch die Verschlüsselung der Daten, sowie einige Informationen über die Authentizität des Servers, mit dem Sie sich verbinden.

Die Delegate-Methode, die hier aufgerufen wird (connection:willSendRequestForAuthenticationChallenge:), bezieht sich nicht darauf, dass Sie sich mit dem Server authentifizieren, sondern dass sich der Server bei Ihnen authentifiziert. Wenn Sie sich in das Challenge-Objekt (NSURLAuthenticationChallenge) vertiefen, können Sie die Anmeldeinformationen finden, die der Server anbietet, um Sie wissen zu lassen, dass es der Server ist, mit dem Sie sich tatsächlich verbinden wollten, anstatt einen Betrüger.

Normalerweise müssen Sie diese Methode nicht verwenden, es sei denn, Sie möchten den Server auf eine Weise validieren, die über das hinausgeht, wofür das Betriebssystem bereits arbeitet.

+0

alles. Vielen Dank! – Mathias

Verwandte Themen