无法通过带有某些链接的NSURLSession下载图像

时间:2019-07-19 07:59:55

标签: objective-c nsurlsession

我只是无法下载此图片: http://img2.imgtn.bdimg.com/it/u=3742910000,2737153630&fm=15&gp=0.jpg 我使用NSURLSession downloadTask,但是它无效,Chrome和Safari可以获取它。 我的代码:

KeyboardAwareScrollView

1 个答案:

答案 0 :(得分:0)

除了“给我这个资源”以外,所有客户端都传递更多的信息。它们还传输诸如正在使用的用户代理之类的数据(即客户端是什么)。在nsurlsession的情况下,它会将用户代理设置为看起来不像Web浏览器的某种东西,在这种情况下,服务器很可能以403错误进行答复(尝试对URL使用curl,您会得到403错误)。

正常下载:

bar

当我将用户代理字符串更改为类似于Firefox时:

$ curl "http://img2.imgtn.bdimg.com/it/u=3742910000,2737153630&fm=15&gp=0.jpg" -o img.jpg
$ file img.jpg
img.jpg: XML 1.0 document text, ASCII text

因此,对于您的nsurlsession,我们需要执行相同或相似的操作。由于有了$ curl -A 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:66.0) Gecko/20100101 Firefox/66.0' "http://img2.imgtn.bdimg.com/it/u=3742910000,2737153630&fm=15&gp=0.jpg" -o img.jpg $ file img.jpg img.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI), density 72x72, segment length 16, baseline, precision 8, 500x333, frames 3 变量,我们可以做类似的事情(这只是示例代码-请自行编写):

_session

尽管,如果您已经在创建带有一些NSMutableDictionary *md = [_session.configuration.httpAdditionalHeaders mutableCopy]; if (md == nil) { md = [[NSMutableDictionary alloc] init]; } md[@"User-Agent"] = @"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:66.0) Gecko/20100101 Firefox/66.0"; _session.configuration.HTTPAdditionalHeaders = md; 的会话,则可能会在其中添加标头。