博客
关于我
SDWebImage--http图片加载不出来的问题
阅读量:376 次
发布时间:2019-03-05

本文共 2227 字,大约阅读时间需要 7 分钟。

图片加载失败的问题,很可能是由于用户未设置User-Agent导致的。以下是详细的解决方法:

当你在网页开发过程中使用SDWebImage库加载图片时,如果发现图片无法正确显示并提示错误信息Error Domain=NSURLErrorDomain Code=403,很有可能是由于图片加载的URL协议不兼容或者缺少必要的User-Agent信息引起的。图片链接如果仅使用HTTP协议而非HTTPS协议,可能会导致部分网站服务器拒绝请求。

常见问题分析

  • HTTP与HTTPS协议不兼容:部分网站服务器为了防止未授权的爬虫抓取,会限制仅允许HTTPS协议的外部请求。如果你的图片链接使用HTTP协议访问,这些服务器会返回403错误。

  • 缺少User-Agent信息:大多数现代网站都会检测请求的来源(User-Agent),以识别爬虫或非法抓取行为。如果你的请求没有User-Agent头信息,服务器可能会拒绝响应。

  • 解决方法

    要解决这个问题,可以按照以下步骤进行:

  • 设置User-Agent头信息

    在使用SDWebImageDownloader加载图片之前,需要先设置User-Agent。可以通过使用sharedDownloader单例来设置User-Agent信息:

    NSString *userAgent = [NSString stringWithFormat:@"%@/%@ (%@; iOS %@; Scale/%0.2f)", 
    [[NSBundle mainBundle] infoDictionary][__bridge NSString *kCFBundleExecutableKey] ?:
    [[NSBundle mainBundle] infoDictionary][__bridge NSString *kCFBundleIdentifierKey],
    [[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"] ?:
    [[NSBundle mainBundle] infoDictionary][__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"];
    }
  • 处理字符编码问题

    如果User-Agent字符串中包含非ASCII字符,可以尝试使用CFStringTransform进行转换:

    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;
    }
    }
  • 设置请求头

    确保User-Agent信息已经正确设置到请求头中:

    [[SDWebImageDownloader sharedDownloader] setValue:userAgent forHTTPHeaderField:@"User-Agent"];
  • 注意事项

    • 单例使用sharedDownloader 是单例,设置User-Agent只需执行一次即可保存。
    • 字符编码处理:如果User-Agent字符串中包含特殊字符,确保字符编码无误。
    • 测试环境:建议在测试环境中验证设置是否正确,避免影响生产环境。

    通过以上方法,可以有效解决图片加载失败的问题,确保图片能够正常显示。

    转载地址:http://cfhg.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现rabin-karp算法(附完整源码)
    查看>>
    Objective-C实现radians弧度制算法(附完整源码)
    查看>>
    Objective-C实现radianToDegree弧度到度算法(附完整源码)
    查看>>
    Objective-C实现radix sort基数排序算法(附完整源码)
    查看>>
    Objective-C实现rail fence围栏密码算法(附完整源码)
    查看>>
    Objective-C实现randomized heap随机堆算法(附完整源码)
    查看>>
    Objective-C实现rayleigh quotient瑞利商算法(附完整源码)
    查看>>
    Objective-C实现RC4加解密算法(附完整源码)
    查看>>
    Objective-C实现RC4加解密算法(附完整源码)
    查看>>
    Objective-C实现recursive bubble sor递归冒泡排序算法(附完整源码)
    查看>>
    Objective-C实现recursive insertion sort递归插入排序算法(附完整源码)
    查看>>
    Objective-C实现recursive quick sort递归快速排序算法(附完整源码)
    查看>>
    Objective-C实现RedBlackTree红黑树算法(附完整源码)
    查看>>
    Objective-C实现redis分布式锁(附完整源码)
    查看>>
    Objective-C实现regular-expression-matching正则表达式匹配算法(附完整源码)
    查看>>
    Objective-C实现relu线性整流函数算法(附完整源码)
    查看>>
    Objective-C实现restful api服务(附完整源码)
    查看>>
    Objective-C实现reverse letters反向字母算法(附完整源码)
    查看>>
    Objective-C实现ReverseNumber反转数字算法 (附完整源码)
    查看>>
    Objective-C实现ReversePolishNotation逆波兰表示法算法 (附完整源码)
    查看>>