在使用Glide的时候一般都不会考虑添加请求头。
但有些时候(抓图)会因为“防盗链”的原因,图片显示不出来。这时候就需要添加请求头,以获取图片资源。
什么是“防盗链”?
防止别人通过一些技术手段绕过本站的资源展示页面,盗用本站的资源,让绕开本站资源展示页面的资源链接失效。
一般的防盗链原理也很简单,都是服务器验证请求头的Referer和Host的值,最多再加上cookie验证。如果你复制了这个图片地址,然后直接到浏览器地址上面访问是无法显示的,因为请求里面没有验证的值。
在Gilde上添加请求头
实现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();
}
实现方式:
@Override
public Map<String, String> getHeaders() {
Map<String, String> header = new HashMap<>();
//不一定都要添加,具体看原站的请求信息
header.put("Referer", "__查看下Referer中需要添加的值__");
header.put("Host","__查看下Host中需要添加的值__")
return header;
}
调用:
/*
* url : 请求地址
* headers : 已实现的Headers实例
*/
headers = new headers(){
@Override
public Map<String, String> getHeaders() {
...
}
}
GlideUrl gliderUrl = new GlideUrl(url,headers)
//显示图片
Glide.with(context).load(gliderUrl).into(imageView);