卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章11201本站已运行3223

突破限制复活新浪图床


背景
新浪图床曾经是做好用的图床,大概在19年吧,新浪添加了防盗链,所有的图片都不能使用了。

防盗链原理
防盗链的原理,是判断访问图片的 referer ,如果是未授权的,图片请求就返回403错误,结果就是图片不能展示。

突破复活原理
先使用 noref 的方式加载图片,加载成功后,在设置为此图片。此时,因为已经有缓存,所以图片可以正常显示。

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>demo</title>
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="renderer" content="webkit">
<meta name="applicable-device" content="pc">
<meta name="mobile-agent" content="format=html5;url=http://m.yy4480.io/api.php/timming/make"/>
<meta http-equiv="Cache-Control" content="no-transform" /> 
<meta http-equiv="Cache-Control" content="no-siteapp" />
<link href="/favicon.ico" type="image/x-icon" rel="icon">
<link href="/favicon.ico" type="image/x-icon" rel="shortcut icon">

</head>
<body>
<script src="//libs.baidu.com/jquery/1.9.1/jquery.js"></script>
<script src="js/evlonimageloader.js?20190225"></script>
<script>
function norefreload(img){
    EvlonImageLoader.reloadImage(img, 'images/empty.gif');
}

function preGetImage(imgsrc){
    return imgsrc;
}

</script>

    <img  class="norelreload" data-src="https://ww1.sinaimg.cn/large/006yeRCugy1g3vsks4061j31b80eg10a.jpg" alt="x战警:黑凤凰 蓝光" style="background-color: #EEEEEE;"/>
    <img  class="norelreload" data-src="https://ww1.sinaimg.cn/large/006yeRCugy1g0tzakoqf0j31b80eg78f.jpg" alt="北漂爱情故事 更新至12集/共12集" style="background-color: #EEEEEE;"/>
    <img  class="norelreload" data-src="https://ww1.sinaimg.cn/large/006yeRCugy1g0pz3t9dh6j31b80egwm3.jpg" alt="正义联盟 蓝光" style="background-color: #EEEEEE;"/>

<script>
    $('img.norelreload').each(function(idx,img){
        img.onerror = function(){
            norefreload(img)};
            $(img).attr('src',preGetImage($(img).attr('data-src')));
    });
</script>
 

 

/**
 * @Project: EvlonImageLoader.
 * @Licence: The MIT License.
 * @Author: Evlon evlion@qq.com.
 * @Description: Crossbrowser kill Ref load Image.
 */

/**
 * home.php?mod=space&uid=395055 ReferrerKiller
 */
var EvlonImageLoader = (function () {
    var showInfo = false;
    var _imageQueue = [];
    var _iframeReady = false;
    var PUB = {};
    PUB.iframeLoaderId = 'evlonimageloader';

    var  reloadImage = PUB.reloadImage = function(img, emptyPic){
        if(img.src == '')
            return;
        var imgsrc = img.src;   
        if(_iframeReady){   
            //处理,方便缓存       
            var match = imgsrc.match(/(^.+?)\?/);
            if(match){
                imgsrc = match[1];
            }

            var iframe = document.getElementById(PUB.iframeLoaderId);
            if(!iframe){
                console.warn('<body><script src="evlonimageloader.js"></script> ...')
                return;
            }
            else{
                var tryTimes = 0;
                var imgsrc_first = imgsrc;
                function doGetImage(){
                    if(showInfo) console.info('load image:' + imgsrc);
                    iframe.contentWindow.getImage(imgsrc,function(success, imgLoaded){
                        if(success){
                            img.src = emptyPic;
                            img.src = imgsrc;
                            img.onerror = null;
                            if(showInfo) console.info('OK load image :' + imgsrc)
                        }
                        else{
                            if(tryTimes < 3){
                                tryTimes ++;
                                imgsrc = imgsrc_first + '?t=' + tryTimes;
                                doGetImage();
                            }
                            else{
                                if(showInfo) {
                                    console.warn('error load image :' + imgsrc);
                                    alert('error load image :' + imgsrc);
                                }
                            }
                        }
                    })
                }
                doGetImage();

            }

        }
        else{
            _imageQueue.unshift(img);
            if(showInfo) console.info('into image queue:' + imgsrc);
        }

    }

    window.__EvlonImageLoader_onIframeReady = PUB.onIframeReady = function(){
        _iframeReady = true;

        if(_imageQueue.length > 0){
            while(_imageQueue.length > 0){
                var img = _imageQueue.pop();
                reloadImage(img);

            }
        }
    };

    function buildIframe(id){
        var iframeHtml = '<iframe onload="__EvlonImageLoader_onIframeReady()" \
        style="display:none;width:1px;height: 1px" \
        scrolling="no" \
        frameborder="no" \
        allowtransparency="true" \
        id="' + id + '" ' +
    '   src="javascript:\'\
    <!doctype html>\
    <html>\
    <head>\
    <meta charset=\\\'utf-8\\\'>\
    <meta name=\\\'referrer\\\' content=\\\'never\\\'>\
    <style>*{margin:0;padding:0;border:0;}\x3C/style>\
    \x3C/head>' +
    /*-- Function to adapt iframe's size to content's size --*/
    '<script>\
        function getImage(imgsrc,cb){\
            var image = new Image() ;\
            image.onload = function(){\
                cb(true,image)\
            };\
            image.onerror = function(err) {\
                cb(false,image);\
            };\
            image.src = imgsrc; \
        } \
        console.info(\\\'evlonimageload inner ok.\\\'); \
    \x3C/script><body> \x3C/body>\x3C/html>\'">\x3C/iframe>';

        document.write(iframeHtml);
    }

    buildIframe(PUB.iframeLoaderId);
    if(showInfo) console.info('evlonimageload outer ok.');

    return PUB;
})();

卓越飞翔博客
上一篇: PHP编写的党建教培网页小游戏
下一篇: 网易云音乐music解析源码
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏