In genere mi piace solo "attivare e disattivare" con il metodo della classe sendAsynchronousRequest di NSURL utilizzando il blocco del gestore di completamento ma sembra che potrebbe non essere un'opzione quando è necessaria l'autenticazione.Autenticazione con NSURLConnection sendAsynchronousRequest con gestore di completamento
Quando si utilizza un completamento richiesta stile handler in questo modo:
[NSURLConnection sendAsynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.mysite.com/"]]
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
//Do Stuff
}];
Qual è il modo corretto di gestire l'autenticazione? Devo allocare e avviare NSURLConnection e impostare un delegato invece di utilizzare questo stile del metodo di classe? Penso di capire come autenticarsi correttamente con la funzione delegate ma sto cercando di capire se posso includerlo nel blocco completionHandler o se c'è un modo migliore per farlo.
- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
if ([challenge previousFailureCount] > 0) {
NSLog(@"Authentication Failure");
[connection cancel];
}
else
{
NSURLCredential *credential = [NSURLCredential credentialWithUser:self.username
password:self.password
persistence:NSURLCredentialPersistenceForSession];
[[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];
}
}
' AFBase64EncodedStringFromString' è un funzione privata, e non è destinato a essere utilizzato da solo. Invece, si può fare 'AFHTTPClient setAuthorizationHeaderWithUsername: password:' e creare un 'NSURLRequest' con' -requestWithMethod: path: parameters: '(o semplicemente copiare l'intestazione di autorizzazione dalla richiesta generata. – mattt
Ci deve essere un modo per ottenere ciò senza Librerie di terze parti ... – dan