HTTPS 站点上的 PhantomJS "SSL handshake failed",即使使用了所有标志
PhantomJS "SSL handshake failed" on HTTPS site, even when using all the flags
PhantomJS 将无法默认加载许多 HTTPS url,但您可以通过添加一些命令行标志(如 --ignore-ssl-errors=true
和 --ssl-protocol=any
来使它们中的许多工作。但是,我发现有些站点即使启用了这些标志也会失败;例如尝试以下代码片段:
var page = require('webpage').create();
page.onResourceError = function(e){
console.log("Page resource failed to load. Reason: "+e.errorString);
}
page.open("https://www.bluehaven.com/pool-remodeling/", function(status){
console.log("Load status: "+status);
});
当我 运行 这个启用了这两个标志的脚本时,我得到以下输出:
$ phantomjs --ignore-ssl-errors=true --ssl-protocol=any lib/test_phantom.js
Page resource failed to load. Reason: SSL handshake failed
Load status: fail
我在谷歌上搜索了很多,围绕 PhantomJS 和 SSL 故障的讨论都建议使用上述两个命令标志,或者建议这是 due to a bug in PhantomJS 不太可能很快得到修复。
SO 上是否有人对如何让 PhantomJS 加载上述 URL(以及发生相同 HTTPS 错误的任何其他站点)有不同的想法?我的计划 B 是尝试 SlimerJS,因为我知道它不会共享此 SSL 错误,但这会涉及一些风险,除非绝对需要,否则我宁愿不这样做。
该程序在 Ubuntu 14.04 和 phantomjs 1.9.0 上运行良好。
由于服务器仅支持 ECDHE 密码,因此我假设您使用的是旧版本的 OpenSSL,您的系统不支持这些密码。
PhantomJS 将无法默认加载许多 HTTPS url,但您可以通过添加一些命令行标志(如 --ignore-ssl-errors=true
和 --ssl-protocol=any
来使它们中的许多工作。但是,我发现有些站点即使启用了这些标志也会失败;例如尝试以下代码片段:
var page = require('webpage').create();
page.onResourceError = function(e){
console.log("Page resource failed to load. Reason: "+e.errorString);
}
page.open("https://www.bluehaven.com/pool-remodeling/", function(status){
console.log("Load status: "+status);
});
当我 运行 这个启用了这两个标志的脚本时,我得到以下输出:
$ phantomjs --ignore-ssl-errors=true --ssl-protocol=any lib/test_phantom.js
Page resource failed to load. Reason: SSL handshake failed
Load status: fail
我在谷歌上搜索了很多,围绕 PhantomJS 和 SSL 故障的讨论都建议使用上述两个命令标志,或者建议这是 due to a bug in PhantomJS 不太可能很快得到修复。
SO 上是否有人对如何让 PhantomJS 加载上述 URL(以及发生相同 HTTPS 错误的任何其他站点)有不同的想法?我的计划 B 是尝试 SlimerJS,因为我知道它不会共享此 SSL 错误,但这会涉及一些风险,除非绝对需要,否则我宁愿不这样做。
该程序在 Ubuntu 14.04 和 phantomjs 1.9.0 上运行良好。 由于服务器仅支持 ECDHE 密码,因此我假设您使用的是旧版本的 OpenSSL,您的系统不支持这些密码。