我只是无法下载此图片: http://img2.imgtn.bdimg.com/it/u=3742910000,2737153630&fm=15&gp=0.jpg 我使用NSURLSession downloadTask,但是它无效,Chrome和Safari可以获取它。 我的代码:
KeyboardAwareScrollView
答案 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;
的会话,则可能会在其中添加标头。