Базовая аутентификация с помощью CasperJS

Casperjs имеет некоторые проблемы, так как он не аутентифицирует страницу при первоначальной загрузке, ниже мой код.

var casper = require('casper').create({
  verbose: false,
  logLevel: 'debug',
  pageSettings: {
    loadImages: false, // The WebPage instance used by Casper will
    loadPlugins: false, // use these settings
  }
});

// print out all the messages in the headless browser context
casper.on('remote.message', function(msg) {
  this.echo('remote message caught: ' + msg);
});

// print out all the messages in the headless browser context
casper.on("page.error", function(msg, trace) {
  this.echo("Page Error: " + msg, "ERROR");
});

//casper.options.viewportSize = {width: 1366, height: 667};

casper.start();
casper.options.pageSettings = {
  customHeaders:{
    'Authorization':'Basic '+btoa('username:password')
  }
}

casper.thenOpen('https://www.dmr.nd.gov/oilgas/basic/getwellprod.asp', function(status) {
  if (status !== 'success') {
    console.log('Unable to access network');
  } else {
    console.log("Getting Authenticated");
    this.echo(this.getTitle());
  }
});

casper.run();

Я также попытался использовать setHttpAuth без удачи. Здесь сообщение Phantom version и resource.error - версия Phantom 1.9.2 и ErrorCode - 6, а описание - сбой рукопожатия SSL

1 ответ

ПУДЕЛЬ

Сообщение об ошибке от resource.error предполагает, что это ошибка пуделя. PhantomJS <1.9.8 по умолчанию использует SSLv3, но из-за POODLE многие веб-серверы отключили поддержку SSLv3. Поэтому вы должны сообщить PhantomJS/CasperJS, что TLS следует использовать:

--ssl-protocol=tlsv1

Вы также можете бросить --ignore-ssl-errors=true в хорошей мере.

Больше информации здесь: CasperJS / PhantomJS не загружает страницу https

Basic Auth

Здесь нет customHeaders вариант для pageSettings, Вы, вероятно, хотели использовать PhantomJS customHeaders опция:

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

Лучшим способом было бы использовать соответствующие настройки для этого:

casper.options.pageSettings = {
    userName: username,
    password: password
};

Вы также можете определить это во время создания.

Если это не решит вашу проблему, свяжитесь с resource.requested а также resource.received события, если заголовки установлены.

Аргументы обратного вызова

Еще одна проблема с вашим кодом заключается в том, что нет status для обратного вызова thenOpen и другие пошаговые функции. Последний успешно загруженный объект ресурса передается в обратный вызов, а не в строку. Таким образом, вы не можете определить, была ли страница загружена успешно, используя это.

Другие вопросы по тегам