Я вызываю веб-службу с помощью схемы HTTPS. Для доступа к веб-службе мне нужно имя пользователя и пароль. Я выполнил базовую аутентификацию http. Я всегда получаю ошибку 401, и я уверен, что имя пользователя и пароль верны. Вот код, который я использовал (я видел этот код здесь: How can I pass credentials while using NSURLSession). Предложения? Спасибо!NSURLSession, базовая аутентификация HTTP и самоподписанный сертификат
NSURL *url = [NSURL URLWithString:@"http://myurl...."];
NSString *user = @"userna,e";
NSString *password = @"password";
NSURLCredential *defaultCredential = [NSURLCredential credentialWithUser:user password:password persistence:NSURLCredentialPersistencePermanent];
NSString *host = [url host];
NSInteger port = [[url port] integerValue];
NSString *protocol = [url scheme];
NSURLProtectionSpace *protectionSpace = [[NSURLProtectionSpace alloc] initWithHost:host port:port protocol:protocol realm:nil authenticationMethod:NSURLAuthenticationMethodHTTPBasic];
NSURLCredentialStorage *credentials = [NSURLCredentialStorage sharedCredentialStorage];
[credentials setDefaultCredential:defaultCredential forProtectionSpace:protectionSpace];
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
[config setURLCredentialStorage:credentials];
NSURLSession *session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];
[[session dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (!error) {
NSHTTPURLResponse *httpResp = (NSHTTPURLResponse*) response;
NSLog(@"%d", httpResp.statusCode);
}
}] resume];
...
// ONLY FOR SELF-SIGNED CERTIFICATE!!! DANGEROUS!!
- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential *))completionHandler
{
NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
completionHandler(NSURLSessionAuthChallengeUseCredential,credential);
}
Конечно, это самое простое решение, но оно работает :) Моя просьба была лучше понять NSURLSession и ее делегатов. в любом случае, +1 –
@FabioMignogna достаточно справедливо. Я могу попробовать снова, чтобы правильно работать и обновлять, но видел, что у него остались без ответа проблемы. Я не уверен, что эти проблемы возникли из-за плохого сервера (отправка 400 не 401) или из-за того, что в основной авторизации нет или нет чего-то другого. Я добавил ссылку на хороший недавний пост от кого-то еще. –
Как рассчитывается часть "fjdslkfsdfk ="? – Michael