Загрузка образа - 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>
Другие вопросы по тегам