unblocker
Version:
Web proxy for evading internet censorship & general-purpose library for rewriting remote websites.
144 lines (113 loc) • 6.8 kB
HTML
<html>
<head>
<title>Node Unblocker</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- header font -->
<link href="//fonts.googleapis.com/css?family=Orbitron" rel="stylesheet" type="text/css">
<!-- body font -->
<link href="//fonts.googleapis.com/css?family=Droid+Sans" rel="stylesheet" type="text/css">
<style type="text/css">
/* fonts */
body { font-family: 'Droid Sans', arial, serif; letter-spacing: 1px;}
h1 { font-family: 'Orbitron', arial, serif; letter-spacing: 2px;}
h2, h3, h4, h5, h6 { letter-spacing: 2px; font-weight: normal;}
/* colors */
body { background-color: #000306; color: white;}
.container { background-color: #3F4038; border-color: #5B3E38}
a { color: #62BECB; }
a:hover {color: #82DEEB }
#error { border:1px dotted white; background: brown; }
/* stripes and borders */
.main { background-repeat: repeat-x; background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAB9CAIAAADbWVFQAAADd0lEQVR4nO3d6VbbMBiE4Tcm3Tf2tRfSf+393wd03/dCk/6AgjF2otiSvpGsuYBY52HO4JPEMHn+4hl6eTqzPkFbptYHaMnRjLn1GW7muKKyPkMzR5KdOq4AMSxlKaSwxKXQ2axDyZ06ud4liWYdSnbq5IaNPVYqUphjJSSF7WYdSO7Uy+7+mDXrQLJTC6SwwkpRChOsRKWIj5WuFJEHfl9y0V85FyZes/YlO+UuRTSsDKSIg5WHFBE2a09yp173KknYZu1JdqqfFEGxMpMiHFZ+UgTCylKKEAO/K7nob3y0wnOzdiU75UUKv1h5S+ERK3spfG3WjuROvfX928vD6+1Idsq7FMOxxiPFQKxRSTEEa2xS9B74bclFfxf4Dac+L78t2anQUvTAGq0Uq2KNWYqVNmtLcqfeR/wwz/VSW5KdiimFI1aROs/yCxapyyy5ZpGqZ9HAb0ou+ge77991XnlTslOGUnRhFanWtFy/SHWluVkbkjv1UUCKRrM2JDslIkUdq0gtzcVZipRLKoqUc6brkov+SU8K88dRWqMptT7Tw5KVQq1ZylLAVGewPktKPaltusoBZaXqkThjElIoYKUihTlWQlLYDvwXSanH3XfpZueVlVoQmyOnKIUJVqJSwHQ+CX+QWr7GvZxjHs1xcYj6U5aVckw8rNSliIaVgRRx7rO+SUo9nK/8rmfwZslK9UhYrJykCIqVmRThsPKTItDAf5eUerD6ojfiv1myUsPjGStjKfxi5S2Fx836ISl1f/BO1eOnWbJSfuMBayRSDMcajxQDsUYlxZCB/ykpdc/rojfSs1myUkHTB2ucUvTAGq0Uq27WL0mpuyF3qp4VmiUrFS2uWEUKR6widZ7lWEXqMksG/rek1J1Yi97IombJSlmlE6tI3Uw7VpFqTctm/ZGUum20U/U0myUrpZBrWEVqca6witTSXGAVKZdM53AqKXVLYNEbqWSlBKP4NWtNqdOJHpasFDr/OfM8U72dAs7+L5VQs4Qeqq3lrLbpKlj6UohgJSGFAlYqUpgP/Jrkov/tuPe0bNaaoFO3FIZYyUlhhZWiFCabVUnu1Ezt4UygEnRykyIyVtJSxMRKXYpoWBlIEWfgJ5KL3uPPDgRv1kTQqZcUobFykiIoVmZSBNwsyZ1i2KczYZql6DRUiiBYmUrhHytfKeAfdPYd7TpexlgAAAAASUVORK5CYII=); }
.footer { min-height: 60px; background-repeat: repeat-x; background-position: bottom left; background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAA8CAIAAAAfXYiZAAAB+ElEQVR4nO3b11aDQBSF4T2IXWM3lhfxTt//PWKvsTfwIllLEobQZuZsYM4DyFkffyKBRJ2encBPsQmlF9BNHEtvoBul+LBiAEp6idQogK0sRdlUrMYnjwhLUTYVJzZiwQoom4rUxMmjwAoom4pSG8ljzTEmhV/duQucrzExDZKCbFkhpdRP9vuBWFmNk4JUWfOUUt95/2MEymqoFNyXtUAp9VXsusVpWY2WgsuyFimlPstcCzsqqwVScIPVDik4eBkuUUp9VPokaresNknBalnLlFLvNe5u2CqrfVKwVNYKpdRb7Ttm5stqqxSMl7VKKfVq6C6sybLaLQWDZa1RSr0YvbNvpqwuSMFIWeuUUs8WnhbVLas7UqhZVo9SamjtCWR1rF5kcA1jM7T5Ybfi3+6gFKqVtUEp9WT/1lzpI3RWCmXL2qSUenT11KXEcTouheJlbVFKPbh9RlzoaF5qNPllbVNK3Ut8oyXnmF4qObPK2qGUupP7/l3mkb1UevRl7VJK3Qp/p1NXlpfKmumy9iilbgikMFWWl5o9/4t4qdwZvwz3KaWumaQwKstLFZywTyl1xScF8Z+jaIdTqh8hZPsx1iWl1EEEsJXFLAUwlXVBKXWYeE9nWZBfCiRlnVNKHaWuE+TXbIoUxMsaUEodZ1x7Si7bLCkAf1M7eHbSdYGuAAAAAElFTkSuQmCC); }
.container { border-style: solid; border-width: 1px; border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; overflow:hidden; /* otherwise the background image appears on top of the curved border */ }
/* layout */
body { text-align: center; }
.container { width: 760px; margin: 40px auto; text-align: left; max-width: calc(100% - 10px);}
h2, h3, h4, h5, h6 { margin-bottom: 0; }
ul { line-height: 150%; }
ul, p { margin-top: 5px; margin-bottom: 0; }
.main, .footer { padding: 1px 10px 0 10px; }
#error {display: none; padding: 5px 10px; margin: 30px 10px; }
form ul { list-style-type: none; padding-left: 25px;}
input[type=text] { width: 640px; max-width: calc(100% - 8em) }
.footer { position: relative; clear: both;}
.footer p { margin:0; position: absolute; bottom: 10px; right: 10px; padding-left: 10px; }
#google-ad {
text-align: center;
margin: 10px auto;
}
@media(min-width: 768px) {
#google-ad {
margin: 0;
float:right;
margin:4px 2px 2px 20px;
}
}
</style>
</head>
<body>
<div class="container">
<div class="main">
<h1>Node Unblocker</h1>
<div id="error"></div>
<form action="no-js" method="get" id="unblocker-form">
<p>
URL:
<input type="text" id="url" name="url" autofocus="autofocus" />
<input type="submit" value="Go" />
</p>
</form>
<div id="google-ad">
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- Nodeunblocker.com -->
<ins class="adsbygoogle"
style="display:inline-block;width:336px;height:280px"
data-ad-client="ca-pub-9477050254721722"
data-ad-slot="3464697570"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>
<h3>About Node Unblocker</h3>
<p>Node Unblocker is a web proxy, similar to CGIProxy, PHProxy, or Glype, that allows users to evade filters and censorship and access blocked websites. </p>
<p>It's designed to be extremely fast and compatible: It processes the data on-the-fly rather than buffering the entire response, and it only modifies URLs when necessary - relative ones will "just work". </p>
<p>Node Unblocker is written in JavaScript with <a href="http://nodejs.org">node.js</a>. The source code is <a href="https://github.com/nfriedly/node-unblocker">available on github</a>.</p>
</div>
<div class="footer">
<p><a href="https://github.com/nfriedly/node-unblocker">Node Unblocker</a> by <a href="http://www.nfriedly.com/" title="Node.js developer and JavaScript Expert">Nathan Friedly</a></p>
</div>
</div>
<script>
function $(id){
return document.getElementById(id);
}
$('unblocker-form').onsubmit = function(){
var url = $('url').value;
if(url.substr(0,4) != "http"){
url = "http://" + url;
}
window.location.pathname = 'proxy/' + url;
return false;
};
function checkError(){
var search = window.location.search;
var start = search.indexOf('error=');
if(start > -1){
var stop = search.indexOf('&', start);
if(stop == -1){ stop = undefined; }
// +6 for "error="
var err = search.substr(start+6, stop);
var $error = $('error');
$error.innerText = $error.textContent = decodeURIComponent(err);
$error.style.display = "block";
}
}
window.onload = function() {
$('url').focus();
checkError();
}
</script>
</body>
</html>