<script type="text/javascript" src="http://www.myfootprints.cn/jsLib/mfMessage.js"></script> <script type="text/javascript">
<!--
var oInfo = new mfMessage();
// 将焦点置于第一个输入框上
oInfo.addEventHandler(window, 'load', function () {
oInfo.focusOnFirstFormElement();
});
// 生成图片链接地址
function generateUrl() {
var sRssUrl = document.getElementById('link').value;
var reUrl = /^(http:\/\/)?(\w+\.)?([\w|-]+)\.\w+.*[^.]$/;
if (sRssUrl.length <= 0) {
return;
}
if (!reUrl.test(sRssUrl)) {
return;
}
var sDoodleImageRSSUrl = 'http://www.myfootprints.cn/ASPAgent.asp';
sDoodleImageRSSUrl += '?url=' + encodeURIComponent(sRssUrl) + '&contentType=image/*';
// 由于有些地方会对链接类型做检查,后缀名不是图片格式则非法,所以多加一个参数
sDoodleImageRSSUrl += '&imgType=.jpg';
document.getElementById('doodleLink').value = sDoodleImageRSSUrl;
var oImg = document.getElementById('imagePreview');
oImg.src = sDoodleImageRSSUrl;
return sDoodleImageRSSUrl;
}
// 输入框里的按键事件捕获
function catchKeyup() {
var oEvent = oInfo.getEvent(window.event);
if (oEvent.keyCode == 13) {
if (oEvent.target == document.getElementById('link')) {
// 生成图片的链接地址
generateUrl();
} else if (oEvent.target == document.getElementById('doodleLink')) {
// 复制图片的链接地址
copyIt(oEvent.target);
}
}
return false;
}
// 复制对象内容
function copyIt(o) {
try {
if (o.value.length > 0) {
o.select();
window.document.execCommand('Copy');
oInfo.showMessage('涂鸦代理链接复制成功。', true);
}
} catch (oError) {
oInfo.showMessage('发生意外,请用鼠标右键->复制或者Ctrl+C复制。');
}
}
//-->
</script>
我在前面的一篇文章《自制网页代理》中,提到了网页代理的两个用处。
今天,我在上篇的网页代理代码中增加了少许几行,便又增加了网页代理的一个“邪恶”的用处,那就是用来盗链像QQ空间等使用了反盗链技术的网站中的图片。
先来分析一下防盗链的技术细节:
一般的反盗链,是在服务器端加上了这样的逻辑,如果对此资源的请求是来自以下两种情况,则允许该请求,并给予相应的响应。
① 直接输入;
② 从本站转发的请求。
如果对此资源的请求是来自其他的未经授权的网站,那么不允许该请求,并可选地给予一个提示。
以下是一个示例。
比如以下这个资源链接,就是QQ空间相册中的一个图片文件:
如果你直接点击那个链接,是可以看到那个图片的。如果你在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
%>
^_^