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"];

    }

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容