Hexo 博客程序解决新浪微博图床 403 防盗链问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
shanlan
V2EX    程序员

Hexo 博客程序解决新浪微博图床 403 防盗链问题

  •  
  •   shanlan 2019-07-03 21:09:06 +08:00 4983 次点击
    这是一个创建于 2297 天前的主题,其中的信息可能已经有所发展或是发生改变。

    微博图床开启了防盗链,导致图片 403 了,这个不用我多说,界面说 3 种解决方法:

    1. 解决方法是 HTML 加上<meta name="referrer" cOntent="no-referrer" />,但是这种效果不会,影响统计功能。

    2. 给 img 标签加上referrerpolicy="no-referrer",这样仅会让图片的请求没有 ReFerer,不影响其他 HTTP 的请求。

    3. 在方法 2 的步骤上升级一下。对 img 的 Src 进行匹配,只有匹配 通过的 img 标签才会加上referrerpolicy="no-referrer",实现方法是添加 Javascript 代码。

    var link = "" ; // 遍历所有的 img 标签 $("img").each( (i,o) => { var o = $(o); // 判断图片的链接是否包含 sinaimg 关键字 if( o.attr("src").indexOf("sinaimg") > 0 ){ // 给这个标签加上 referrerPlicy 属性 o.attr("referrerpolicy","no-referrer"); // 备份图片的 src link = o.attr("src"); // 重新设置 src,让页面重新加载一次图片 o.attr("src",link); } }); 

    以上为简单描述,具体实现方法请参见:解决新浪 /微博图床图片 403 错误防盗链问题

    28 条回复    2019-12-01 23:12:31 +08:00
    ysc3839
        1
    ysc3839  
       2019-07-03 21:35:08 +08:00 via Android
    Hexo 的话应该有更优雅的方案,直接在 Markdown 生成器里面检测并添加。
    abcdocker
        2
    abcdocker  
       2019-07-03 22:03:20 +08:00
    WordPress 才是王道
    https://i4t.com/
    shanlan
        3
    shanlan  
    OP
       2019-07-03 22:03:55 +08:00
    @ysc3839 欢迎补充。
    shanlan
        4
    shanlan  
    OP
       2019-07-03 22:05:05 +08:00
    @abcdocker 这个是用 GitHub pages 等免费的静态服务器部署,不需要额外购置服务器。
    luckyrayyy
        5
    luckyrayyy  
       2019-07-03 22:13:27 +08:00 via iPhone
    hexo 可以直接生成同名文件夹,图片也放在 pages 里,压根不用图床。
    ysc3839
        6
    ysc3839  
       209-07-03 22:26:46 +08:00
    @luckyrayyy 用图床是为了避免网站本身访问太慢吧。
    love4taylor
        7
    love4taylor  
    PRO
       2019-07-03 22:48:27 +08:00 via Android
    @luckyrayyy 流量以及存储容量都是个问题.
    szhaoliang
        8
    szhaoliang  
       2019-07-03 22:57:23 +08:00 via Android
    @ysc3839 GitHub 在国内访问很慢吗?图片都是直接放在 GitHub 上,要是慢的话要考虑下家了。
    fqxufo
        9
    fqxufo  
       2019-07-03 22:57:46 +08:00
    有的老版本浏览器不支持 referrerpolicy 的特性吧
    MonoLogueChi
        10
    MonoLogueChi  
       2019-07-03 23:01:02 +08:00 via Android
    @szhaoliang 很慢,而且可用率不高
    ysc3839
        11
    ysc3839  
       2019-07-03 23:05:59 +08:00 via Android
    @szhaoliang 我说不清,具体情况可能很复杂,建议自行测试。
    vB4h3r2AS7wOYkY0
        12
    vB4h3r2AS7wOYkY0  
       2019-07-03 23:11:21 +08:00   1
    @Livid #2
    无意义回复, 且该帐号下所有回复均指向其博客.
    fstab
        13
    fstab  
       2019-07-03 23:41:09 +08:00 via Android
    @luckyrayyy github 不套 cf,根本不能用
    edsion996
        14
    edsion996  
       2019-07-04 00:13:11 +08:00 via iPhone
    借助数据万象(原万象优图),让 hexo 也用上 webp: https://blog.i1hao.com/2019/07/02/cloud-infinite/

    这是我的解决方案
    mayx
        15
    mayx  
       2019-07-04 00:16:14 +08:00 via Android
    @MayKiller 我看不是所有,有一些不是。
    vB4h3r2AS7wOYkY0
        16
    vB4h3r2AS7wOYkY0  
       2019-07-04 01:46:08 +08:00
    @mayx 嗷. 的确有一些不是.
    #12 s/所有 /大部分 /g
    Livid
        17
    Livid  
    MOD
    PRO
       2019-07-04 03:35:09 +08:00 via iPhone
    @MayKiller 谢谢。
    shanlan
        18
    shanlan  
    OP
       2019-07-04 13:45:44 +08:00
    @MayKiller #12 吓我一跳,我还以为举报我垃圾内容呢。。。。
    @szhaoliang #8 GitHub pages 非常慢; coding 很快,其次是 netlify。
    @luckyrayyy #5 影响访问速度,所以通常静态资源能省就省了。
    @zjb861107 #14 初次访问忘记抓包了,所以具体哪个文件慢我也没法告诉,所以我又清空了 dns 缓存特地给你抓了一次包。具体如下图://ws2.sinaimg.cn/large/96e311f0gy1g4nr772pujj21h50id0wl.jpg ;绿色的是 TTFB 时间,蓝色的 Content download 时间。
    @fqxufo #9 又不是盈利的项目,所以不关心用户是不是老浏览器。再说了,谁让他坚守老浏览器呢?而且博客也是针对计算机编程技术类的,作为一个搞技术的人还坚守老浏览器就更说不过去了。
    @ysc3839 #11 本来就是很慢的,Coding 快很多
    edsion996
        19
    edsion996  
       2019-07-04 14:18:30 +08:00
    @shanlan 你的意思我的博客访问慢吗?这个我是知道的,(偷笑)。
    一方面是因为有谷歌统计、字体这些,受梯子影响不一定快;另外我只有那一篇文章是用了 webp,老的图片资源还没来得及迁移。
    以前我是用的良心云各种服务自建博客的,速度很快。后来尝试用 Travis-CI 的时候把博客迁到 Github Pages 就懒得再恢复回来了,因为 github 禁止百度爬虫。
    yinaw
        20
    yinaw  
       2019-07-20 10:08:37 +08:00
    我现在也在为此事头疼,我有一个 WordPress 博客,第一种第二种方法都试过。

    第一种直接影响百度统计,无法统计站点信息。

    第二种要每篇文章重新编辑重新添加标签,我这差不多是一个图片博客,有上万张图片,工程量太大,而且新增文章图片也要嵌入标签。麻烦的很。

    对您说的第三种方法很感兴趣,请问,您的这些 Javascript 代码对 WordPress 博客有效吗?
    shanlan
        21
    shanlan  
    OP
       2019-07-22 00:10:54 +08:00
    @yinaw #20 原文:“我现在也在为此事头疼,我有一个 WordPress 博客,第一种第二种方法都试过。第一种直接影响百度统计,无法统计站点信息。第二种要每篇文章重新编辑重新添加标签,我这差不多是一个图片博客,有上万张图片,工程量太大,而且新增文章图片也要嵌入标签。麻烦的很。对您说的第三种方法很感兴趣,请问,您的这些 Javascript 代码对 WordPress 博客有效吗?”
    ======
    回复:你好,当然是有效的,前提是你需要把 Javascript 代码引入到正确的页面。
    yinaw
        22
    yinaw  
       2019-07-22 11:38:09 +08:00
    @shanlan 按照您的方法放在了页面底部,但是打开速度好像有点慢,有的图片依然打不开,要刷新一遍才行。

    另外我看您的博客代码好像更新了一些,多了一行 setTimeout( function(){ 以及 后面加了个 1000 的数字,请问这些更新是什么情况?提升稳定性以及缩短加载时间吗?

    在这方面是小白一个,还望大佬赐教...
    shanlan
        23
    shanlan  
    OP
       2019-07-22 23:27:21 +08:00   1
    @yinaw #22 原文:“@shanlan 按照您的方法放在了页面底部,但是打开速度好像有点慢,有的图片依然打不开,要刷新一遍才行。另外我看您的博客代码好像更新了一些,多了一行 setTimeout( function(){ 以及 后面加了个 1000 的数字,请问这些更新是什么情况?提升稳定性以及缩短加载时间吗?在这方面是小白一个,还望大佬赐教...”
    ======
    回复:起初我遇到了和你一样的问题,有的图片不能打开。我简单的猜测是因为刚开页面的时候浏览器向服务器请求一张图片,但是由于网速等原因还没有请求完成,而底部的 Javascript 代码就已经开始执行了。但是因为之前图片还在请求中,即使后面 Javascript 代码修改了 img 标签的属性,浏览器还没有办法进行第二次请求,从而导致图片依然不能正常显示。

    所以,我使用 setTimeout()这个延时命令,让这段 Javascript 代码延迟 1000 毫秒执行,就是为了让浏览器有足够的时间去等待图片服务器的响应结果。所以,如果你的图片经常不能显示,不妨加大这个延迟时间。

    亦或者你写一段 Javascript 代码,判断的条件是:img 标签的 src 属性是不是新浪的域名,并且图片的分辨率大小小于某个值,从而让浏览器是不是要再重新加载请求一次图片。原因是图片加载成功后,分辨率肯定会很大的,这样就不用写一个固定的延迟时间,因为延迟时间是固定的,而每个人的网络环境、电脑配置并不是固定,所以这种判断加载图片的方式应该更加的合理。
    =====
    例如我文中这个页面,使用 Chrome 浏览器若图片不能打开的情况下图标的大小的:
    document.querySelector("#post-解决新浪-微博图床图片 403 错误防盗链问题 > div.article-entry.marked-body > p:nth-child(5) > img").width
    107
    document.querySelector("#post-解决新浪-微博图床图片 403 错误防盗链问题 > div.article-entry.marked-body > p:nth-child(5) > img").height
    22
    =====
    当然这个破图的 icon 大小是取决于浏览器的,具体你怎么判断需要你自己去尝试。但是我想应该没有图片的分辨率会低于 200PX 吧?
    =====

    另外,打开速度慢需要具体分析,你可以把链接发出来我给你看看。
    yinaw
        24
    yinaw  
       2019-12-01 03:08:22 +08:00
    大佬,我的 WordPress 博客在底下添加你这几行代码,用了几个月,有一些问题想请教一下:

    目前谷歌火狐 360 浏览器都没有问题,IE 有问题,这个大家都知道,IE 份额小,忽略也没事。

    但是在移动端上,苹果 IOS 系统还是无法显示图片,有没有其他办法?

    毕竟 IOS 份额不小啊..
    shanlan
        25
    shanlan  
    OP
       2019-12-01 13:27:06 +08:00
    @yinaw #24 原文:“大佬,我的 WordPress 博客在底下添加你这几行代码,用了几个月,有一些问题想请教一下:

    目前谷歌火狐 360 浏览器都没有问题,IE 有问题,这个大家都知道,IE 份额小,忽略也没事。

    但是在移动端上,苹果 IOS 系统还是无法显示图片,有没有其他办法?

    毕竟 IOS 份额不小啊..”
    ======
    回复:#24 我只能给你提供个思路,该方法只使用了 img 标签的:referrerpolicy="no-referrer",属性。所以你需要做的是去查询 iOS 浏览器是不是不支持这个属性。
    yinaw
        26
    yinaw  
       2019-12-01 15:15:33 +08:00
    经测试:iOS 浏览器对于 https 的微博图片标签属性不支持,对于 http 的微博图片倒是支持,

    难道要改回 http,这是一个繁巨的任务啊~

    大佬,有没有其他办法
    shanlan
        27
    shanlan  
    OP
       2019-12-01 22:01:09 +08:00
    @yinaw #26 原文:“经测试:iOS 浏览器对于 https 的微博图片标签属性不支持,对于 http 的微博图片倒是支持,

    难道要改回 http,这是一个繁巨的任务啊~

    大佬,有没有其他办法”
    ======
    回复:#26 这不是简答吗?用 Javascript 判断 UA 头,如果是 iOS 就将网址的改为 http 开头,否认是 https
    yinaw
        28
    yinaw  
       2019-12-01 23:12:31 +08:00
    那上面这几行代码怎么改?

    我是小白啊,大佬帮帮忙,搞好后给您发个红包...
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3776 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 00:52 PVG 08:52 LAX 17:52 JFK 20:52
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86