Kar*_*ker 26 javascript http phantomjs
我正在尝试在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();
});
}
Run Code Online (Sandbox Code Playgroud)
我可以从渲染的page.jpg看到我每次都得到401.我还使用Wireshark跟踪HTTP会话,这表明在给定URL的GET请求中没有发送认证头.
我在这做错了什么?我刚刚开始使用PhantomJS,但我整晚都在寻找并且没有得到太多...
Dar*_*ook 34
PhantomJS(至少从1.9.0开始)有一个auth的错误:它在没有auth头的情况下发送请求,然后只有在它返回401之后才会再次执行请求,但这次是使用头.(这是为了GET;使用POST它根本不起作用.)
解决方法很简单,因此不是:
page.settings.userName = 'username';
page.settings.password = 'password';
Run Code Online (Sandbox Code Playgroud)
您可以使用:
page.customHeaders={'Authorization': 'Basic '+btoa('username:password')};
Run Code Online (Sandbox Code Playgroud)
(我刚刚在一篇博文中介绍过这个问题:http://darrendev.blogspot.jp/2013/04/phantomjs-post-auth-and-timeouts.html,并从Igor Semenko那里了解了PhantomJS邮件列表的解决方法.)
我不认为使用或幻像的脚本有任何问题(至少在v1.5中).
如果您尝试此脚本:
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();
});
}
Run Code Online (Sandbox Code Playgroud)
phantomjs loadspeed.js http://browserspy.dk/password-ok.php
身份验证成功.
归档时间: |
|
查看次数: |
22740 次 |
最近记录: |