Created
April 7, 2014 22:33
-
-
Save ninetails/10069406 to your computer and use it in GitHub Desktop.
Gist for check redirects
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var util = require('util'), | |
fs = require('fs'), | |
net = require('net'), | |
filename = './redir.txt', | |
useragents = [ | |
{ | |
name: 'Chrome 33.0.1750.152', | |
value: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36' | |
}, | |
{ | |
name: 'Firefox 25.0', | |
value: 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0' | |
} | |
], | |
domains = [ | |
'folha.com', | |
'folha.uol.com', | |
'folha.com.br', | |
'folha.uol.com.br', | |
'www.folha.com', | |
'www.folha.uol.com', | |
'www.folha.com.br', | |
'www.folha.uol.com.br', | |
'www1.folha.uol.com', | |
'www1.folha.com.br', | |
'www1.folha.uol.com.br', | |
'app.folha.com', | |
'app.folha.uol.com' | |
], | |
prepare_request = function (domain, useragent, get) { | |
var request = [ | |
util.format('GET %s HTTP/1.1', get || '/'), | |
util.format('Host: %s', domain), | |
'Connection: close' | |
]; | |
if (typeof useragent === 'string' && useragent.length > 0) { | |
request.push(util.format('User-Agent: %s', useragent)); | |
} | |
request.push(''); | |
request.push(''); | |
return request.join("\n"); | |
}, | |
make_request = function (domain, port, request, uaname) { | |
var s = new net.Socket(); | |
s.connect(port, domain); | |
s.write(request); | |
s.on('data', function(d){ | |
log_redirect(uaname, domain, d.toString()); | |
}); | |
s.on('error', function(d){ | |
append_text(util.format('%s - %s', domain, d.toString())); | |
s.destroy(); | |
}); | |
s.end(); | |
}, | |
append_text = function (text) { | |
console.log(text); | |
fs.appendFile(filename, util.format('%s\n', text), function (err) { | |
if (err) throw err; | |
}); | |
}, | |
log_redirect = function (ua, domain, response) { | |
var status, code, location, output, | |
lines = response.split(/\n|\r\n/); | |
if (!lines[0].match(/^HTTP\/1\.1\s/)) { | |
return; | |
} | |
status = lines[0].replace('HTTP/1.1 ', ''); | |
code = parseInt(status.split(/\s/)[0], 10); | |
if (ua == null) { | |
ua = 'no useragent'; | |
} | |
output = ua; | |
output += ' : '; | |
output += domain; | |
output += ' = '; | |
output += status; | |
if (code === 301 || code === 302) { | |
output += ' => '; | |
response = response.replace(/\r\n/, "\n"); | |
location = response.match(/Location\:\s([^\r\n]+)/)[1]; | |
output += location; | |
} | |
console.log(output); | |
append_text(output); | |
}, | |
exec_request = function (useragent) { | |
for (var i = 0, total = domains.length; i < total; i++) { | |
if ( typeof useragent !== 'undefined' ) { | |
request = prepare_request(domains[i], useragent.value); | |
make_request(domains[i], 80, request, useragent.name); | |
} else { | |
request = prepare_request(domains[i]); | |
make_request(domains[i], 80, request); | |
} | |
} | |
}; | |
// do request for no useragent | |
exec_request(); | |
for (var i = 0, total = useragents.length; i < total; i++) { | |
exec_request(useragents[i]); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment