<div style="text-indent: 2em; font-size: larger;">

在前面的文章《涂鸦代理:强行引用反盗链图片》中,给出了网页代理的代码。

今天做了一些改进,对于返回的图片,给出它原来的实际文件名,而不是统一的 "OpenItWithYourPhotoViewer.jpg"。

如下:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<% Option Explicit %>
<%Session.CodePage=65001%>
<%
    Response.CharSet = "utf-8"
%>
<%    
    Dim url, oHTTP, charset, contentType
    url = Request.QueryString("url")
    charset = Request.QueryString("charset")
    contentType = Request.QueryString("contentType")
    
    If Len(contentType) <= 0 Then
        contentType = "text/html"
    End If
    Response.ContentType = contentType
    
    If Len(charset) <= 0 Then
        charset = "utf-8"
    End If
    
    If Len(url) > 0 Then
    
        Set oHTTP = Server.CreateObject("Microsoft.XMLHTTP")
        oHTTP.Open "GET", url, False
        On Error Resume Next
        oHTTP.Send
        If Err.Number <> 0 Then
            Session("ssnErrorNumber") = Err.Number
            Session("ssnErrorDescription") = Err.Description
            Session("ssnErrorSource") = Err.Source
        End If
        On Error Goto 0
        
        if contentType = "text/html" Then        
            If charset = "utf-8" Then
                Response.Write oHTTP.ResponseText
            Else
                Response.Write Cbns2TextStream(oHTTP.ResponseBody, charset)
            End If
        Else
            Dim fileName
            fileName = Right(url, Len(url) - InStrRev(url, "/"))
            'Response.AddHeader "Content-Disposition", "attachment; filename=" & "OpenItWithYourPhotoViewer.jpg"
            Response.AddHeader "Content-Disposition", "attachment; filename=" & fileName
            Response.BinaryWrite oHTTP.ResponseBody
        End If
        Set oHTTP = Nothing
        
        If Session("ssnErrorNumber") <> 0 Then
            Server.Transfer "error/Default.asp"
        End If
    Else
        Response.Write ""
    End If
%>
<%
    '
    ' 将指定的二进制串转换成特定编码的文本
    '
    Public Function Cbns2TextStream(ByRef bns, ByRef sCharset)
        Dim stm
        
        Set stm = Server.CreateObject("ADODB.Stream")
        stm.Type = 2
        stm.Open
        stm.WriteText bns
        stm.Position = 0
        If Len(sCharset) > 0 Then stm.Charset = sCharset
        Cbns2TextStream = stm.ReadText
        stm.Close
        Set stm = Nothing
    End Function 
%>