2013-04-28 201 views
14

我剛剛更改了我的代碼,將圖像從EGOImageCache緩存到SDWebView。不幸的是,我不知道如何設置自定義HTTP標頭,因爲我必須發送認證才能獲取圖像。使用EGOImageCache很容易,因爲我已將NSURLRequest擴展到適當的位置。但我不知道如何用SDWebView.framework來做到這一點。我看到標題,我發現SDWebImageDownloader.h中的方法包含SDWebImage並設置自定義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; 

似乎lib確實支持HTTP標頭。但是,因爲我使用UIImageView + WebCache.h我不能看到有設置標題的選項。在我的代碼我打電話

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

有人可以告訴我如何設置HTTP標頭?

回答

38

我有同樣的問題,我試圖讓:

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

但頭不發送。經過一番嘗試,我遇到了這個問題,在sharedDownloader上的SDWebImageDownloader創建了一個SDWebImageDownloader的新實例,所以當你將該頭部放在該實例中時,真正下載圖像的實例不具有頭部。

我已經解決了使這個:

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

我會試試看。謝謝您的回覆!似乎並不是很多開發者需要這個功能。 – rockstarberlin 2013-05-27 15:21:20

+1

你先生應該得到更多的讚揚。這個答案是100%正確的,原始代碼是直觀的。 – Emilio 2014-04-23 14:06:26

+4

爲什麼,上帝?爲什麼這個SDK以這種方式工作?爲什麼? – d512 2014-05-07 19:30:19

2

我知道這是很老,但不能幫助分擔我工作。我需要爲標題logintoken設置登錄標記值。所以,這段代碼做了什麼,我想 -

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

我使用基本身份驗證和設置在sharedDownloaderusernamepassword幫助:

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

斯威夫特版本

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