Last active
July 1, 2023 23:59
-
-
Save papoms/3453137 to your computer and use it in GitHub Desktop.
Fake Referrer with Phantomjs
This file contains 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 system = require('system'); | |
// Exit in case of wrong parameter count. | |
if (system.args.length !== 3) { | |
console.log('Usage: scriptname targetUrl referrer'); | |
console.log('example: $> phantomjs fake-referrer.phantom.js http://example.com http://referrer.example.com'); | |
phantom.exit(); | |
} | |
// Set the important pieces | |
var targetUrl = system.args[1]; | |
var referrer = system.args[2]; | |
console.log('Going to open '+targetUrl+' with the referrer '+referrer); | |
var page = require('webpage').create(); | |
// set our custom referer [sic] | |
page.customHeaders = { | |
"Referer" : referrer | |
}; | |
page.onLoadFinished = function(status){ | |
page.customHeaders = {}; | |
// get the currentUrl | |
var currentUrl = page.evaluate(function() { | |
return document.location.href; | |
}); | |
// get the referrer | |
var currentReferrer = page.evaluate(function() { | |
return document.referrer; | |
}); | |
console.log('Loading ' + currentUrl + ' finished with status: ' + status+'. document.referrer is: '+currentReferrer); | |
// Only once do | |
if ( page.firstLoad ) { | |
page.firstLoad = false; | |
console.log('Injecting the Link.'); | |
// Inject and Click a Link to our target | |
page.evaluate(function (href) { | |
// Create and append the link | |
var link = document.createElement('a'); | |
link.setAttribute('href', href); | |
document.body.appendChild(link); | |
// Dispatch Click Event on the link | |
var evt = document.createEvent('MouseEvents'); | |
evt.initMouseEvent('click', true, true, window, 1, 1, 1, 1, 1, false, false, false, false, 0, link); | |
link.dispatchEvent(evt); | |
}, targetUrl); | |
} else { | |
console.log('Exiting'); | |
phantom.exit(); | |
}; | |
}; | |
page.firstLoad = true; | |
page.open(referrer); |
Well, at least I know it's not just me…
$ phantomjs -v
2.0.0
$ phantomjs fake-referrer.phantom.js http://robcolburn.com http://referrer.example.com
Going to open http://robcolburn.com with the referrer http://referrer.example.com
Loading about:blank finished with status: fail. document.referrer is:
Injecting the Link.
Loading http://robcolburn.com/ finished with status: success. document.referrer is:
Exiting
Unfortunately not working :|
yes it is not working
Use Settings:
var settings = {
headers: {
"Referer": "referer_url"
}
};
And pass it as the second argument on function page.open, like that:
page.open(url, settings, function(status) {
...
});
how it will use?
`
page.onResourceRequested = function(r,n){
page.customHeaders = {};
};
`
This is where the customHeaders should be cleared, and NOT in onLoadFinished because all elements called by that first page would still have the referer instead of the page itself.
And you can always put a condition to call it only once for neatness but I doubt there would be any performance improvement.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thnx for the script! At least one modification should be made: after resetting the firstLoad indicator (line 39) the customHeaders should be cleared with "page.customHeaders = {};". Otherwise the referrer will be also send to every object (including images) loaded by the page. Some servers don't accept requests to elements from different hosts.