script run phantom installing example javascript http phantomjs

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).