微博图床被防盗链不加载响应403完美解决
使用一些MarkDown软件写博客时大都会设置图片自动上传,这样只需要复制一遍MarkDown文本即可粘贴到多个平台发布,很多免费的图床插件都是将图片上传至微博图床,毕竟免费。但微博并不会那么大方,在请求微博图片时会检测request头部Referer字段的值,来鉴别请求来源。
解决方法就是将Referer禁掉,例如可以在html文件中设置meta标签如下:
<meta name="referrer" content="never">
另一种方法是在每个img的标签设置referrerpolicy属性:
<img src="" referrerpolicy="no-referrer">
如果你的图片引用比较少还好,如果引用的图片多了,一个一个改就太麻烦,交给程序去帮我们做这件事就非常合适。
设计一个jar包,只需要执行一遍的java -jar
,即可全自动扫描jar包所在目录下的所有md文件,并自动将 ![]()
更换为 <img>
标签的形式,且支持以追加参数的形式指定扫描目录。
最后贴一下Java代码:
/**
* 使用方法:
* java -jar 的形式执行jar包
* 默认扫描jar包所在路径,不会递归扫描
* 可以追加参数 path=xxx 指定扫描xxx目录
*/
public class App {
public static void main(String[] args) throws IOException {
String path = null;
for (int i = 0; i < args.length; i++) {
String arg = args[i];
if (arg.startsWith("path=")){
path = arg.substring(5);
break;
}
}
if (path==null){
path = System.getProperty("user.dir");
}
System.out.println("--开始扫描目录:"+path);
File file = new File(path);
File[] list = file.listFiles();
if (list == null) {
System.out.println("--空目录");
return;
}
//创建输出目录
String out = path + "/out/";
new File(out).mkdir();
for (int i = 0; i < list.length; i++) {
String name = list[i].getName();
if (!(list[i].isFile() && (name.endsWith(".md") || name.endsWith(".MD")))) {
continue;
}
System.out.println("--"+list[i].getName());
try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(list[i])));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(out+name))))
) {
String line;
while ((line = reader.readLine()) != null) {
String src = src(line);
writer.write(src +"\n");
}
writer.flush();
}
}
System.out.println("--结束");
}
/**
* 提取img的src
*/
private static String src(String s){
String[] split = s.split("!");
for (int i = 0; i < split.length; i++) {
if (split[i].length()>4&&split[i].contains("[")&&split[i].contains("]")&&split[i].contains("(")&&split[i].contains(")")){
int start = split[i].lastIndexOf("(");
int end = split[i].lastIndexOf(")");
String s1 = split[i].substring(start + 1, end);
s = s.replace("!" + split[i], "<img src=\"" + s1 + "\" referrerPolicy=\"no-referrer\"/>");
}
}
return s;
}
}
版权声明:凡未经本网站书面授权,任何媒体、网站及个人不得转载、复制、重制、改动、展示或使用本网站的局部或全部的内容或服务,或在非本网站所属服务器上建立镜像。如果已转载,请自行删除。同时,我们保留进一步追究相关行为主体的法律责任的权利。我们希望与各媒体合作,签订著作权有偿使用许可合同,故转载方须书面/邮件申请,以待商榷。