NSURLConnection - wyłącza mechanizm odpowiedzi na wyzwanie uwierzytelnienia
SYTUACJA
Korzystanie z AFNetworking (NSURLConnection) w celu uzyskania dostępu do interfejsu API mojego serweraInterfejs API wymaga uwierzytelniania podstawowego z tokenem jako nazwą użytkownikaInterfejs API zwraca HTTP 401, gdy token jest nieprawidłowyNagłówki podstawowego uwierzytelniania ustawiam przed jakimkolwiek żądaniemJeśli zwróci 401, ponawiam próbę w ten sposób:
AFHTTPRequestOperation *requestOperation = [MyHTTPClient.sharedClient HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) {
processSuccessBlock(operation, responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
processFailureBlock(operation, error);
if (operation.response.statusCode == 401)
[MyHTTPClient.sharedClient refreshTokenAndRetryOperation:operation success:processSuccessBlock failure:processFailureBlock];
}];
PROBLEM
Gdy serwer zwraca HTTP 401 z wyzwaniem Basic Authentication, AFNetworking / NSURLConnectiondwukrotnie wysyła identyczne żądanie (wstępne żądanie, a następnie odpowiedź na wyzwanie uwierzytelnienia)Ale z powodu powyższego kodu, ja sam radzę sobie z HTTP 401,jest to całkowicie niepotrzebne i chcę, aby automatycznie przestał odpowiadać na wyzwanie uwierzytelnianiaCO wypróbowałem
OdpowiadamcancelAuthenticationChallenge:
dowillSendRequestForAuthenticationChallenge:
przerywa drugie wywołanie, ale daje kod błędu -1012 (NSURLErrorUserCancelledAuthentication) zamiast 401 i maskuje prawdziwą odpowiedźJak wyłączyć mechanizm odpowiedzi na wyzwanie uwierzytelniania, aby uzyskać odpowiedź serwerów bez wywołania go dwukrotnie?