Я пытаюсь открыть веб-страницу, которая требует HTTP-аутентификации, в PhantomJS. Мой сценарий базируется на loadspeed.js пример:PhantomJS не отправляет заголовок аутентификации
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();
});
}
Я могу видеть из оказанной page.jpg, что я получаю 401 каждый раз. Я также прослеживал сеанс HTTP с помощью Wireshark, который показывает, что в запросе GET ни один URL-адрес проверки подлинности не отправляется на указанный URL.
Что я здесь делаю неправильно? Я только начинаю работу с PhantomJS, но я все время искал и не получил далеко ...
Какой браузер? Chrome 19 просто не позволяет вам назначить XHR имя пользователя и пароль. Это было вызвано, когда они запретили имя пользователя: пароль @ доля URL-адресов. HTTP Auth против другого веб-сайта - сложный бизнес. Думаю, я напишу блог об этой теме в ближайшие выходные или около того. – panzi
Не делать этого напрямую, но хочу отметить, что с PhantomJS 1.9.2 и SlimerJS 0.8.4 ваша информация аутентификации (независимо от того, выполняются ли они с 'page.settings' или' page.customHeaders'), отправляется на все сторонние серверы, указанные на этой странице. (Например, если страница, в которую вы входите, использует CDN для своего jQuery, тогда сервер CDN получает ваше имя пользователя и пароль, аналогично для серверов объявлений.) SlimerJS, по крайней мере, работает над решением. –