0

我正在尝试从 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];

仅为此,我收到了身份验证挑战。

原因是什么?

我浏览了stackoverflow并找到了这些链接:

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

4

2 回答 2

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]);
}
于 2017-07-26T06:45:33.737 回答
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>
于 2017-07-26T06:45:52.770 回答