Загрузка образа - NSURLSession получил запрос на аутентификацию
Я пытаюсь загрузить простое изображение с URL http://d1vqbpto5tbbz0.cloudfront.net/blog/wp-content/uploads/2014/08/25215844/ios-logo1.png
Это простой URL-адрес через браузер без входа в систему.
Я пытался с этим кодом:
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
configuration.timeoutIntervalForRequest = timeout;
NSURLSession *urlSession = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
[[urlSession dataTaskWithURL:urlImage] resume];
Только для этого я получаю запрос аутентификации.
В чем причина?
Я прошел через stackru и нашел эти ссылки:
Во всех ссылках указывается ввести user: пароль. Какое имя пользователя и пароль я могу ввести?
2 ответа
Вы реализовали NSURLSessionDelegate
метод протокола didReceiveChallenge
,
Всякий раз, когда возникает проблема аутентификации, этот метод будет получать вызовы. И вы должны упомянуть, что это доверенный сервер.
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition
disposition, NSURLCredential *credential))completionHandler
{
completionHandler(NSURLSessionAuthChallengeUseCredential, [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]);
}
Похоже, проблема скорее всего связана с тем, что сайт не использует SSL/TSA. Для решения проблемы и загрузки изображения соответствуют NSURLSessionDelegate
делегировать и реализовать следующий метод.
- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * _Nullable credential))completionHandler;
РЕДАКТИРОВАТЬ
Другой вариант - указать произвольные загрузки в вашем списке, чтобы разрешить загрузку HTTP-ссылок. Это не рекомендуется для выпущенного приложения, но для тестирования это более чем нормально.
Добавьте следующее к вашему plist
:
<key>NSAppTransportSecurity</key>
<dict>
<!--Include to allow all connections (DANGER)-->
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>