从网上来的代码,,稍微修改了一些地方,其实用的是cache类。。
保存代码为,比如pic.asp
使用:http://www.xxx.com/pic.asp?url=http://www.aaaa.com/log.gif
不光是163,其实就是很多防盗连的图片都可以这个实现。
- <%
- '盗链判断
- 'If Instr(Request.ServerVariables("http_referer"),"http://"&Request.ServerVariables("server_name")&"") = 0 Then
- 'Response.Write "非法链接"
- 'Response.End
- 'End If
- Dim url, body, myCache
- url = 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 If
- If 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 'url
- private sub class_initialize()
- path=request.servervariables("url")
- path=left(path,instrRev(path,"/"))
- end sub
- private sub class_terminate()
- end sub
- public property get blEmpty
- '是否为空
- if isempty(obj) then
- blEmpty=true
- else
- blEmpty=false
- end if
- end property
- public 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 property
- public property let name(str)
- '设置cache名
- cacheName=str & path
- obj=application(cacheName)
- expireTimeName=str & "expires" & path
- expireTime=application(expireTimeName)
- end property
- public property let expires(tm)
- '重设置过期时间
- expireTime=tm
- application.lock
- application(expireTimeName)=expireTime
- application.unlock
- end property
- public 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 sub
- public 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 property
- public sub makeEmpty()
- '释放application
- application.lock
- application(cacheName)=empty
- application(expireTimeName)=empty
- application.unlock
- obj=empty
- expireTime=empty
- end sub
- public 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
- %>