【问题标题】:PhantomJS "SSL handshake failed" on HTTPS site, even when using all the flagsHTTPS 站点上的 PhantomJS “SSL 握手失败”,即使使用所有标志也是如此
【发布时间】:2015-07-09 14:57:21
【问题描述】:

默认情况下,PhantomJS 将无法加载许多 HTTPS url,但您可以通过添加一些命令行标志(如 --ignore-ssl-errors=true--ssl-protocol=any)来让其中的许多 URL 正常工作。但是,即使启用了这些标志,我也发现一些站点会失败;例如尝试以下代码 sn-p:

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

我在 Google 上搜索了很多,关于 PhantomJS 和 SSL 故障的讨论都建议使用上述两个命令标志,或者建议这是 due to a bug in PhantomJS,不太可能很快得到修复。

对于如何让 PhantomJS 加载上述 URL(以及发生相同 HTTPS 错误的任何其他站点),SO 上的任何人是否有不同的想法?我的计划 B 是试用 SlimerJS,因为我知道它不会共享此 SSL 错误,但这会带来一些风险,除非绝对需要,否则我宁愿不这样做。

【问题讨论】:

    标签: ssl https phantomjs slimerjs


    【解决方案1】:

    该程序在带有 phantomjs 1.9.0 的 Ubuntu 14.04 上运行良好。 由于服务器仅支持 ECDHE 密码,因此我假设您使用的是旧版本的 OpenSSL,系统上不支持这些密码。

    【讨论】:

    • 感谢您的提示!我在使用 OpenSSL 版本 0.9.8zd 的 Mac OSX Yosemite 上,但在使用 OpenSSL 版本 1.0.1e 的 CentOS 上也会出现错误。我会尝试更新到 1.0.2,看看是否有帮助。我还在运行最新的 PhantomJS (2.0.0),我了解到它并不总是很聪明,因为较新的版本会出现一些错误,而这些错误在早期版本中没有出现......
    • @Steffen 对于它的价值,我使用您提到的相同版本的 Ubuntu 和 PhantomJS(Ubuntu 14.04 和 PhantomJS 1.9.0)得到了 SSL handshake failed 错误。使用与 OP 相同的标志 (--ignore-ssl-errors=true --ssl-protocol=any)。
    • @supertrue:握手失败的原因有很多。请提出一个包含足够详细信息的新问题来重现您的问题,而不是在 2 年前的帖子中添加评论。
    猜你喜欢
    • 2016-01-31
    • 1970-01-01
    • 2015-05-17
    • 2018-07-28
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多