Базовая аутентификация с помощью 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
и другие пошаговые функции. Последний успешно загруженный объект ресурса передается в обратный вызов, а не в строку. Таким образом, вы не можете определить, была ли страница загружена успешно, используя это.