Sto tentando di aprire una pagina Web che richiede l'autenticazione HTTP, in PhantomJS. Il mio script è basato l'esempio loadspeed.js:PhantomJS non invia l'intestazione di autenticazione
var page = require('webpage').create(),
t, address;
page.settings.userName = "user";
page.settings.password = "password";
if (phantom.args.length === 0) {
console.log('Usage: loadspeed.js <some URL>');
phantom.exit();
} else {
t = Date.now();
address = phantom.args[0];
page.open(address, function (status) {
if (status !== 'success') {
console.log('FAIL to load the address');
} else {
t = Date.now() - t;
console.log('Loading time ' + t + ' msec');
page.render('page.jpg');
}
phantom.exit();
});
}
posso vedere dalla page.jpg reso che sto ricevendo un 401 ogni volta. Ho anche tracciato la sessione HTTP utilizzando Wireshark, che rivela che nessuna intestazione di autenticazione viene inviata nella richiesta GET all'URL specificato.
Cosa sto facendo di sbagliato qui? Sto appena iniziando con PhantomJS ma ho cercato tutta la sera e non sono andato lontano ...
Che browser? Chrome 19 non consente semplicemente di impostare XHR come nome utente e password. Ciò è stato causato quando hanno impedito il nome utente: password @ percentuale di URL. L'autenticazione HTTP contro un sito Web diverso è un lavoro complicato. Immagino che scriverò un blog su questo argomento il prossimo fine settimana o giù di lì. – panzi
Non fare direttamente con questa domanda, ma voglio sottolineare che a partire da PhantomJS 1.9.2 e SlimerJS 0.8.4, le tue informazioni di autenticazione (fatte con 'page.settings' o' page.customHeaders') vengono inviate a tutti i server di terze parti a cui si fa riferimento in quella pagina. (Ad esempio, se la pagina in cui si effettua l'accesso utilizza un CDN per il proprio jQuery, allora il server CDN ottiene il nome utente e la password, analogamente per gli ad server.) SlimerJS, almeno, sta lavorando a una soluzione. –