SDWebImage и настройка пользовательских HTTP-заголовков?
Я только что изменил свой код для кэширования изображений от EGOImageCache до SDWebView. К сожалению, я не знаю, как настроить пользовательские заголовки HTTP, поскольку я должен отправить аутентификацию, чтобы иметь возможность получать изображения. Это было легко сделать с помощью EGOImageCache, поскольку я расширил NSURLRequest в соответствующем месте. Но я не знаю, как это сделать с SDWebView.framework. Я вижу заголовки, и я нашел методы в SDWebImageDownloader.h, содержащие
/**
* Set a value for a HTTP header to be appended to each download HTTP request.
*
* @param value The value for the header field. Use `nil` value to remove the header.
* @param field The name of the header field to set.
*/
- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field;
/**
* Returns the value of the specified HTTP header field.
*
* @return The value associated with the header field field, or `nil` if there is no corresponding header field.
*/
- (NSString *)valueForHTTPHeaderField:(NSString *)field;
Кажется, что lib поддерживает HTTP-заголовки. Но поскольку я использую UIImageView + WebCache.h, я не вижу там возможности для настройки заголовков. В моем коде я звоню
[self.imageView setImageWithURL:[NSURL URLWithString:themeImageURL] placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
Может кто-нибудь сказать мне, как установить HTTP-заголовки?
Ответы
Ответ 1
У меня была та же проблема, и я попытался сделать:
SDWebImageDownloader *manager = [SDWebImageDownloader sharedDownloader];
[manager setValue:username forHTTPHeaderField:@"X-Oauth-Username"];
Но заголовок не был отправлен. После некоторых попыток я столкнулся с проблемой, SDWebImageDownloader в sharedDownloader создает новый экземпляр SDWebImageDownloader, поэтому, когда вы помещаете заголовок в этот экземпляр, экземпляр, который действительно загружает изображение, не имеет заголовка.
Я решил сделать это:
SDWebImageDownloader *manager = [SDWebImageManager sharedManager].imageDownloader;
[manager setValue:username forHTTPHeaderField:@"X-Oauth-Username"];
Ответ 2
Я знаю, что он довольно старый, но не мог не поделиться тем, что сработало для меня. Мне нужно было установить значение токена входа для заголовка logintoken
. Итак, этот фрагмент кода сделал то, что я хотел -
NSString *loginToken = // Some method to fetch login token
[SDWebImageDownloader.sharedDownloader setValue:loginToken forHTTPHeaderField:@"logintoken"];
Ответ 3
Я использую обычную проверку подлинности и устанавливаю username
и password
в sharedDownloader
:
SDWebImageDownloader *downloader = [SDWebImageDownloader sharedDownloader];
downloader.username = @"username";
downloader.password = @"password";
Ответ 4
Быстрая версия
let imageDownloader = SDWebImageDownloader.shared()
imageDownloader.setValue("Username", forHTTPHeaderField: "X-Oauth-Username")
Ответ 5
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)
}
}
})