图像下载 - NSURLSession收到身份验证质询

时间:2017-07-26 06:37:41

标签: ios objective-c authentication nsurlsession authenticationchallenge

我试图从网址下载简单图片 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];

仅此而我接受身份验证挑战。

它是什么原因?

我已经完成了stackoverflow并找到了这些链接:

在所有链接中,都提到输入user:password。我可以输入什么用户名和密码?

2 个答案:

答案 0 :(得分:1)

您已实施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]);
}

答案 1 :(得分:0)

看起来这个问题很可能是因为该网站没有使用SSL / TSA。要处理挑战并加载图像,请遵守NSURLSessionDelegate委托,并实施以下方法。

- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * _Nullable credential))completionHandler;

修改

另一种选择是在plist中指定任意加载以允许加载HTTP链接。它不推荐用于已发布的应用程序,但对于测试它会更好。

将以下内容添加到plist

<key>NSAppTransportSecurity</key>
<dict>
  <!--Include to allow all connections (DANGER)-->
  <key>NSAllowsArbitraryLoads</key>
      <true/>
</dict>