2013-04-28 11 views
14

Właśnie zmieniłem kod do buforowania obrazów z EGOImageCache na SDWebView. Niestety nie wiem, jak ustawić niestandardowe nagłówki HTTP, ponieważ muszę wysyłać uwierzytelnienia, aby móc pobierać obrazy. Z EGOImageCache było to łatwe, ponieważ rozszerzyłem NSURLRequest w odpowiednim miejscu. Ale nie wiem, jak to zrobić z SDWebView.framework. Widzę nagłówki i Ive znaleźć metody w SDWebImageDownloader.h zawierającySDWebImage i ustawianie niestandardowych nagłówków HTTP?

/** 
* 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; 

Wydaje się, że lib obsługuje nagłówki HTTP. Ale ponieważ używam UIImageView + WebCache.h, nie widzę opcji do ustawiania nagłówków. W moim kodzie mogę zadzwonić pod numer

[self.imageView setImageWithURL:[NSURL URLWithString:themeImageURL] placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; 

Czy ktoś może mi powiedzieć, jak ustawić nagłówki HTTP?

Odpowiedz

38

miałem ten sam problem, a ja starałem się zrobić:

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

Ale nagłówek nie wysłać. Po kilku próbach natknąłem się na problem, SDWebImageDownloader na sharedDownloader tworzy nową instancję SDWebImageDownloader, więc kiedy umieścisz nagłówek w tej instancji, instancja, która naprawdę pobiera obraz, nie ma nagłówka.

I został rozwiązany czyniąc to:

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

Spróbuję tego. Dziękuję za odpowiedź! wygląda na to, że wielu deweloperów nie potrzebuje tej funkcji. – rockstarberlin

+1

Zasługujesz na więcej poparcia. Ta odpowiedź jest w 100% poprawna, a oryginalny kod jest sprzeczny z intuicją. – Emilio

+4

Dlaczego, Boże? Dlaczego ten SDK działa w ten sposób? Czemu? – d512

2

Wiem, że to dość stary, ale nie mógł pomóc dzielić co pracował dla mnie. Musiałem ustawić wartość tokena logowania dla nagłówka logintoken. Tak, ten kawałek kodu zrobił to, co chciałem -

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

Używam uwierzytelniania podstawowego i ustawieniu username i password na sharedDownloader pomógł:

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

Swift Wersja

let imageDownloader = SDWebImageDownloader.shared() 
imageDownloader.setValue("Username", forHTTPHeaderField: "X-Oauth-Username") 
Powiązane problemy