在使用Glide的時(shí)候一般都不會(huì)考慮添加請(qǐng)求頭。
但有些時(shí)候(抓圖)會(huì)因?yàn)椤胺辣I鏈”的原因,圖片顯示不出來致份。這時(shí)候就需要添加請(qǐng)求頭,以獲取圖片資源础拨。
什么是“防盜鏈”氮块?
防止別人通過一些技術(shù)手段繞過本站的資源展示頁面,盜用本站的資源诡宗,讓繞開本站資源展示頁面的資源鏈接失效滔蝉。
一般的防盜鏈原理也很簡(jiǎn)單,都是服務(wù)器驗(yàn)證請(qǐng)求頭的Referer和Host的值塔沃,最多再加上cookie驗(yàn)證锰提。如果你復(fù)制了這個(gè)圖片地址,然后直接到瀏覽器地址上面訪問是無法顯示的芳悲,因?yàn)檎?qǐng)求里面沒有驗(yàn)證的值立肘。
在Gilde上添加請(qǐng)求頭
實(shí)現(xiàn)Headers接口,重寫getHeaders()方法:
public interface Headers {
@Deprecated
Headers NONE = new Headers() {
@Override
public Map<String, String> getHeaders() {
return Collections.emptyMap();
}
};
Headers DEFAULT = new LazyHeaders.Builder().build();
Map<String, String> getHeaders();
}
實(shí)現(xiàn)方式:
@Override
public Map<String, String> getHeaders() {
Map<String, String> header = new HashMap<>();
//不一定都要添加,具體看原站的請(qǐng)求信息
header.put("Referer", "__查看下Referer中需要添加的值__");
header.put("Host","__查看下Host中需要添加的值__")
return header;
}
調(diào)用:
/*
* url : 請(qǐng)求地址
* headers : 已實(shí)現(xiàn)的Headers實(shí)例
*/
headers = new headers(){
@Override
public Map<String, String> getHeaders() {
...
}
}
GlideUrl gliderUrl = new GlideUrl(url,headers)
//顯示圖片
Glide.with(context).load(gliderUrl).into(imageView);