SDWebImage and setting custom HTTP headers?

给你一囗甜甜゛ 提交于 2019-11-28 21:20:15

I had the same problem, and I tried to make:

SDWebImageDownloader *manager = [SDWebImageDownloader sharedDownloader];
[manager setValue:username forHTTPHeaderField:@"X-Oauth-Username"];

But the header were not send. After some tries, I came across the problem, SDWebImageDownloader at sharedDownloader makes a new instance of SDWebImageDownloader, so when you put the header at that instance, the instance that really downloads the image don't has the header.

I've solved making this:

SDWebImageDownloader *manager = [SDWebImageManager sharedManager].imageDownloader;
[manager setValue:username forHTTPHeaderField:@"X-Oauth-Username"];

I know it's pretty old but couldn't help to share what worked for me. I needed to set a login token value for header logintoken. So, this piece of code did what I wanted -

NSString *loginToken = // Some method to fetch login token    
[SDWebImageDownloader.sharedDownloader setValue:loginToken forHTTPHeaderField:@"logintoken"];

I am using Basic authentication and setting the username and password on the sharedDownloader helped:

SDWebImageDownloader *downloader = [SDWebImageDownloader sharedDownloader];
downloader.username = @"username";
downloader.password = @"password";

Swift Version

let imageDownloader = SDWebImageDownloader.shared()
imageDownloader.setValue("Username", forHTTPHeaderField: "X-Oauth-Username")
Manikandan

Swift 4.1

let manager = SDWebImageManager.shared().imageDownloader
manager?.setValue("oAuthToken",forHTTPHeaderField: "AuthHeaderName")
manager?.downloadImage(with: imageURL, options: SDWebImageDownloaderOptions.useNSURLCache, progress:
                { (receivedSize, expectedSize , url) in
                // progression tracking code
            }, completed: { (image,data , error,finished) in
                if error == nil && image != nil {
                    // here the downloaded image is cached, now you need to set it to the imageView
                    DispatchQueue.main.async {
                        imageView.image = image
                        self.maskCircle(anyImage: image!)
                    }
                } else {
                    // handle the failure
                    DispatchQueue.main.async {
                        let defaultImage = UIImage(named: "defaultImage")
                        imageView.image = defImage
                        self.maskCircle(anyImage: defImage)
                    }
                }
            })
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!