PhantomJS无法打开HTTPS si

2024-04-26 19:12:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用以下基于loadspeed.js示例的代码打开一个https://site,它还需要http服务器身份验证。

var page = require('webpage').create(), system = require('system'), t, address;

page.settings.userName = 'myusername';
page.settings.password = 'mypassword';

if (system.args.length === 1) {
    console.log('Usage: scrape.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();
    });
}  

它无法一直加载页面。这里可能有什么问题?安全站点的处理方式有什么不同吗?但是,可以通过浏览器成功访问该站点。

我只是从幻影开始,现在发现它太好了,不能停止玩,即使我没有推进这个问题。


Tags: logdateifsettingsaddresspagejsexit
3条回答

我尝试了Fred和Cameron Tinker的答案,但只有ssl protocol=any选项似乎对我有帮助:

phantomjs --ssl-protocol=any test.js

另外,我认为使用--ssl-protocol=any应该更安全,因为您仍在使用加密,但是--ignore-ssl-errors=true将忽略(duh)所有ssl错误,包括恶意错误。

注意,从2014年10月16日起,PhantomJS默认使用SSLv3打开HTTPS连接。随着the POODLE vulnerability最近的发布,许多服务器正在禁用SSLv3支持。

为了解决这个问题,您应该能够运行PhantomJS:

phantomjs --ssl-protocol=tlsv1

希望PhantomJS很快就会更新,使TLSv1成为默认值,而不是SSLv3。

这个问题很可能是由于SSL证书错误造成的。如果您使用--ignore ssl errors=yes选项启动phantomjs,它应该继续加载页面,就像没有ssl错误时一样:

phantomjs --ignore-ssl-errors=yes [phantomOptions] script.js [scriptOptions]

我看到一些网站在错误地实现它们的SSL证书或它们已经过期等方面存在问题。这里提供了phantomjs的完整命令行选项列表:http://phantomjs.org/api/command-line.html。我希望这能有帮助。

相关问题 更多 >