PhantomJS不发送认证头(PhantomJS doesn't send authent

2019-06-23 13:23发布

我试图打开一个网页需要的HTTP认证,在PhantomJS。 我的脚本是基于关闭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();
  });
}

我可以从我得到每次401渲染page.jpg看到。 我使用Wireshark的,它揭示了无认证报头在GET请求到指定的URL发送还跟踪的HTTP会话。

我在做什么错在这里? 我刚开始接触PhantomJS,但我一直在寻找一个晚上,远没有得到...

Answer 1:

PhantomJS(至少为1.9.0)具有权威性的一个错误:发送请求没有身份验证标题,然后它得到401回它再这样做的请求,但与头这段时间之后。 (这是GET,POST与它没有在所有的工作。)

解决方法很简单,所以不是:

page.settings.userName = 'username';
page.settings.password = 'password';

您可以使用:

page.customHeaders={'Authorization': 'Basic '+btoa('username:password')};

(我只是涵盖这在博客: http://darrendev.blogspot.jp/2013/04/phantomjs-post-auth-and-timeouts.html ,并学会在PhantomJS从伊戈尔Semenko邮件列表的替代方法。)



Answer 2:

我不觉得有什么不对您的使用脚本或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();
    });
}

phantomjs loadspeed.js http://browserspy.dk/password-ok.php

该身份验证是成功的。



文章来源: PhantomJS doesn't send authentication header