使用asp代码突破图片的防盗连

  从网上来的代码,,稍微修改了一些地方,其实用的是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

  %>