javascript - run - PhantomJS no envía encabezado de autenticación
phantomjs svg (2)
No creo que haya nada malo con el script que usas o phantomjs (al menos en v1.5).
Si intentas este script:
var page = require(''webpage'').create(),
system = require(''system''),
t, address;
page.settings.userName = ''test'';
page.settings.password = ''test'';
if (system.args.length === 1) {
console.log(''Usage: loadspeed.js <some URL>'');
phantom.exit();
} else {
t = Date.now();
address = system.args[1];
page.open(address, function (status) {
if (status !== ''success'') {
console.log(''FAIL to load the address'');
} else {
t = Date.now() - t;
console.log(''Page title is '' + page.evaluate(function () {
return document.title;
}));
console.log(''Loading time '' + t + '' msec'');
}
phantom.exit();
});
}
phantomjs loadspeed.js http://browserspy.dk/password-ok.php
La autenticación es exitosa.
Estoy intentando abrir una página web que requiere autenticación HTTP, en PhantomJS. Mi script se basa en el ejemplo de loadspeed.js:
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();
});
}
Puedo ver en la página renderizada.jpg que recibo un 401 cada vez. También he rastreado la sesión HTTP usando Wireshark, lo que revela que no se envía ningún encabezado de autenticación en la solicitud GET a la URL dada.
¿Qué estoy haciendo mal aquí? Estoy empezando con PhantomJS pero he estado buscando toda la noche y no he llegado muy lejos ...
PhantomJS (al menos desde 1.9.0) tiene un error con auth: envía la solicitud sin los encabezados de autenticación, y solo después de recuperar el 401 vuelve a hacer la solicitud, pero esta vez con los encabezados. (Eso es para GET; con POST no funciona en absoluto).
La solución es simple, así que en lugar de:
page.settings.userName = ''username'';
page.settings.password = ''password'';
puedes usar:
page.customHeaders={''Authorization'': ''Basic ''+btoa(''username:password'')};
(Acabo de cubrir esto en una publicación de blog: http://darrendev.blogspot.jp/2013/04/phantomjs-post-auth-and-timeouts.html , y aprendí esa solución en la lista de correo PhantomJS de Igor Semenko).