我在前面的一篇文章《自制网页代理》中,提到了网页代理的两个用处。
今天,我在上篇的网页代理代码中增加了少许几行,便又增加了网页代理的一个“邪恶”的用处,那就是用来盗链像QQ空间等使用了反盗链技术的网站中的图片。
先来分析一下防盗链的技术细节:
一般的反盗链,是在服务器端加上了这样的逻辑,如果对此资源的请求是来自以下两种情况,则允许该请求,并给予相应的响应。
① 直接输入;
② 从本站转发的请求��
如果对此资源的请求是来自其他的未经授权的网站,那么不允许该请求,并可选地给予一个提示。
以下是一个示例。
比如以下这个资源链接,就是QQ空间相册中的一个图片文件:
http://b12.photo.store.qq.com/http_imgload.cgi?/rurl4_b=26fea1a982b3b43d7e42333ceb8faeb0a2ba1ab8621187e3a05a36b67b0123b8d544bd31c983761e0359ed86fea5943ce1fb9d402da2036fe393da21799a280f08e82c7a3ee1841e3d6d1b0056183db04cbcdd84&a=23&b=12
如果你直接点击那个链接,是可以看到那个图片的。如果你在QQ空间中发表日志,在日志中引用该图片,也是可以正确地看到那个图片的。
但是,如果你在其他的地方引用该图片,就看不到那张图片了,而是看到一个提示图片,提示说:“此图片来自QQ空间,未经允许不可引用”。比如在人人网中发表的日志“http://blog.renren.com/blog/244527631/424930074”中,就引用了该图片,但是看不见。
或者我再在此篇文章中直接引用该图片如下,你将看到一个不准引用的提示:
知道了以上技术细节,就可以找到破解方法了,即在别的未经授权的网站上引用图片时,将该请求转变成直接请求,而不是从该网站转发请求。于是便可以想到网页代理可以用来做这件事情。网页代理就是,代理你发出对该资源的请求,而且是直接请求的形式,它不会告诉目标服务器,我的这个请求,是从一个你没有授权的网站中发出来的。从而使得目标服务器给予期待的响应。
我将我写的网页代理文件,命名为“涂鸦网页代理”。同样是上面那幅QQ空间中的图片,我在下面引用它,使用“涂鸦网页代理”的方式,来看看效果:
怎么样?真是令人激动。
我不鼓励盗链,而且反对自己没有任何资源而全部盗链别人的资源的行为,那是一种偷窃的行为。然而,有时候的确需要引用别处的资源,这个时候是一种正当的引用,然而,如何区分正当与否,目标服务器实在无能为力。所以,如果你是正当引用,欢迎使用本文所提及的涂鸦网页代理。如果你想纯粹地偷窃,请走开。
如何使用“涂鸦网页代理”呢?
你只需要将你要引用的图片链接地址,套上一层“涂鸦网页代理”网址的外衣就可以了。格式如下:
http://www.myfootprints.cn/ASPAgent.asp?url=你要引用的图片网址&contentType=image/*
非常地简单,如果你不想自己输入那些字符,那么,你只要将你要引用的图片链接,粘贴到下面的文本框中,并点击“生成涂鸦代理链接”,然后复制那个“涂鸦代理链接”,粘贴到你想引用的地方就可以了。
正当破解防盗链引用步骤:
(一)输入或者粘贴你要引用的图片链接地址(以http://开头):
(二)复制涂鸦代理链接,粘贴到你要引用的地方,搞定!
知道了原理和使用方法,现在来看一看涂鸦网页代理的源代码,它是《自制网页代理》一文中代码的改进版。虽然你可以直接使用上述引用向导来引用你想要的图片,但是,你也可以复制以下代理,制作自己的网页代理,并使用自己的代理来引用图片。这里的代码只是一个起步,你可以改进得更好。
ASPAgent.asp源码:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<% Option Explicit %>
<%Session.CodePage=65001%>
<%
Response.CharSet = "utf-8"
%>
<%
Dim sRSSUrl, oHTTP, charset, contentType
sRSSUrl = 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(sRSSUrl) > 0 Then
Set oHTTP = Server.CreateObject("Microsoft.XMLHTTP")
oHTTP.Open "GET", sRSSURL, False
oHTTP.Send
if contentType = "text/html" Then
If charset = "utf-8" Then
Response.Write oHTTP.ResponseText
Else
Response.Write Cbns2TextStream(oHTTP.ResponseBody, charset)
End If
Else
Response.AddHeader "Content-Disposition", "attachment; filename=" & "OpenItWithYourPhotoViewer.jpg"
Response.BinaryWrite oHTTP.ResponseBody
End If
Set oHTTP = Nothing
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
%>
^_^