使用方法:将代码保存为img.ASP上传到服务器,图片地址为img?url=XXXXXX
测试了很多解除图片盗链的代码,发现这个写得最好,不过盗链图片对于服务器来说开销相当于原来的两倍,更加好的方法是第一次盗链的时候保存一个缓存,第二次就直接调用缓存不用再读取远程图片了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | < % Dim url, body, myCacheurl = Request.QueryString("url")Set myCache = new cache myCache.name = "picindex"&url If myCache.valid Then body = myCache.value Else body = GetWebData(url) myCache.add body,dateadd("d",1,now) End IfIf Err.Number = 0 Then Response.CharSet = "UTF-8" Response.ContentType = "application/octet-stream" Response.BinaryWrite body Response.Flush Else Wscript.Echo Err.Description End if'取得数据 Public Function GetWebData(ByVal strUrl) Dim curlpath curlpath = Mid(strUrl,1,Instr(8,strUrl,"/")) Dim Retrieval Set Retrieval = Server.CreateObject("Microsoft.XMLHTTP") With Retrieval .Open "Get", strUrl, False,"","" .setRequestHeader "Referer", curlpath .Send GetWebData =.ResponseBody End With Set Retrieval = Nothing End Function'cache类class Cache private obj 'cache内容 private expireTime '过期时间 private expireTimeName '过期时间application名 private cacheName 'cache内容application名 private path 'urlprivate sub class_initialize() path=request.servervariables("url") path=left(path,instrRev(path,"/")) end subprivate sub class_terminate() end subpublic property get blEmpty '是否为空 if isempty(obj) then blEmpty=true else blEmpty=false end if end propertypublic property get valid '是否可用(过期) if isempty(obj) or not isDate(expireTime) then valid=false elseif CDate(expireTime)<now then valid=false else valid=true end if end propertypublic property let name(str) '设置cache名 cacheName=str & path obj=application(cacheName) expireTimeName=str & "expires" & path expireTime=application(expireTimeName) end propertypublic property let expires(tm) '重设置过期时间 expireTime=tm application.lock application(expireTimeName)=expireTime application.unlock end propertypublic sub add(var,expire) '赋值 if isempty(var) or not isDate(expire) then exit sub end if obj=var expireTime=expire application.lock application(cacheName)=obj application(expireTimeName)=expireTime application.unlock end subpublic property get value '取值 if isempty(obj) or not isDate(expireTime) then value=null elseif CDate(expireTime)<now then value=null else value=obj end if end propertypublic sub makeEmpty() '释放application application.lock application(cacheName)=empty application(expireTimeName)=empty application.unlock obj=empty expireTime=empty end subpublic function equal(var2) '比较 if typename(obj)<>typename(var2) then equal=false elseif typename(obj)="Object" then if obj is var2 then equal=true else equal=false end if elseif typename(obj)="Variant()" then if join(obj,"^")=join(var2,"^") then equal=true else equal=false end if else if obj=var2 then equal=true else equal=false end if end if end function end class %> |