SDWebImage通过url加载不出图片

今天遇到一个问题,SDWebImage加载不出图片,通过浏览器可以正常打开链接看到图片,url如下:

报错信息如下:

通过网上查阅知道是因为此链接含有逗号,后台不方便改,那就自己来优化吧。

解决方法如下:

找到SDWebImage的源码中的"UIImage+WebCache.m",在下图中的方法内增加如图所示的代码。

网上对于这个的解释是说缺少 User-Agent 用户代理。  User Agent,是指浏览器,它的信息包括硬件平台、系统软件、应用软件和用户个人偏好。我的理解就是通过这部分代码设置的用户代理,其格式包含了“,”所需要的,所以就可以访问到含有逗号的图片了,没有这部分设置SD就会认为这个链接属于不支持的格式类型。(如果理解不对,欢迎指正)

代码如下:

NSString *userAgent = @"";

userAgent = [NSString stringWithFormat:@"%@/%@ (%@; iOS %@; Scale/%0.2f)", [[[NSBundle mainBundle] infoDictionary] objectForKey:(__bridge NSString *)kCFBundleExecutableKey] ?: [[[NSBundle mainBundle] infoDictionary] objectForKey:(__bridge NSString *)kCFBundleIdentifierKey], [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"] ?: [[[NSBundle mainBundle] infoDictionary] objectForKey:(__bridge NSString *)kCFBundleVersionKey], [[UIDevice currentDevice] model], [[UIDevice currentDevice] systemVersion], [[UIScreen mainScreen] scale]];

  if (userAgent) {

        if (![userAgent canBeConvertedToEncoding:NSASCIIStringEncoding])  {

            NSMutableString *mutableUserAgent = [userAgent mutableCopy];

            if (CFStringTransform((__bridge CFMutableStringRef)(mutableUserAgent), NULL, (__bridge CFStringRef)@"Any-Latin; Latin-ASCII; [:^ASCII:] Remove", false)) {

                userAgent = mutableUserAgent;

            }

        }

        [[SDWebImageDownloader sharedDownloader] setValue:userAgent forHTTPHeaderField:@"User-Agent"];

    }

你可能感兴趣的:(SDWebImage通过url加载不出图片)