【发布时间】:2012-04-24 06:55:25
【问题描述】:
我正在尝试在 PhantomJS 中打开一个需要 HTTP 身份验证的网页。 我的脚本基于 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();
});
}
我可以从渲染的 page.jpg 中看到,我每次都会收到 401。 我还使用 Wireshark 跟踪了 HTTP 会话,这表明在 GET 请求中没有向给定 URL 发送任何身份验证标头。
我在这里做错了什么?我刚刚开始使用 PhantomJS,但我整个晚上都在搜索,但没有走多远......
【问题讨论】:
-
什么浏览器? Chrome 19 只是不允许您通过 XHR 设置用户名和密码。这是因为他们不允许用户名:密码@ URL 的比例。针对不同网站的 HTTP 身份验证是一项棘手的工作。我想我会在下周末左右写一篇关于这个话题的博客。
-
不直接处理这个问题,但我想指出,从 PhantomJS 1.9.2 和 SlimerJS 0.8.4 开始,您的身份验证信息(无论是使用
page.settings还是page.customHeaders完成)被发送到该页面上引用的所有 3rd 方服务器。 (例如,如果您登录的页面使用 CDN 作为其 jQuery,那么该 CDN 服务器会获取您的用户名和密码;对于广告服务器也是如此。)至少,SlimerJS 正在研究解决方案。
标签: javascript http phantomjs