当前位置: 首页 > 知识库问答 >
问题:

PhantomJS不发送身份验证头

池阳伯
2023-03-14

我试图在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,但我整个晚上都在寻找,没有走远...

共有2个答案

慕金林
2023-03-14

我认为您使用的脚本或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();
    });
}

幻影加载速度。jshttp://browserspy.dk/password-ok.php

认证成功。

南宫凯康
2023-03-14

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,并从Igor Semenko那里了解到关于PhantomJS邮件列表的解决方法。)

 类似资料:
  • 我试图将用于需要基本HTTP身份验证的第三方服务。我正在使用。以下是我到目前为止的结论:

  • 问题内容: 我的Web服务器托管在具有基本身份验证的Apache Tomcat 7中。我有Tomcat用户“ tomcat”,角色为“ tomcat”,密码为“ tomcat”。以下分别是我在客户端的web.xml文件和脚本片段。 Web.xml 客户端脚本: 我很确定Web服务和基本身份验证没有问题。但是从客户端脚本中,没有发送身份验证标头。我也尝试过 但是请求发送时没有身份验证头。任何帮助将不

  • 身份验证 PDF版下载 企业应用中的URL链接可以通过OAuth2.0验证接口来获取员工的身份信息。 通过此接口获取员工身份会有一定的时间开销。对于频繁获取员工身份的场景,建议采用如下方案: 企业应用中的URL链接直接填写企业自己的页面地址; 员工跳转到企业页面时,企业校验是否有代表员工身份的cookie,此cookie由企业生成; 如果没有获取到cookie,重定向到OAuth验证链接,获取员工

  • SMTP服务器 ;                  [myserverName] 默认用户电子邮件后缀 ; [myemailId] 使用SMTP身份验证 ; true 用户名称 ;                     [myemailId] 密码 ;                       [mypassword] 使用SSL ;                       假 SMTP

  • 问题内容: 我正在尝试在Node.js中使用Socket.IO,并试图允许服务器为每个Socket.IO客户端赋予一个身份。由于套接字代码不在http服务器代码的范围内,因此无法轻松访问已发送的请求信息,因此我假设在连接期间需要将其发送出去。什么是最好的方法 1)将有关谁通过Socket.IO连接到服务器的信息 2)验证他们说的是谁(如果正在使事情变得更容易,我目前正在使用Express) 问题答