ssl - Neko hxssl 不适用于 HTTPS

标签 ssl haxe neko haxelib

我正在重写一个更大的项目,其中已经有相当大的代码库是用 neko 编写的。该项目的一个方面是一个数据抓取器,它将(在高峰时段)打开 100 多个连接到 WebSockets 服务器。最初,这是通过使用 WebSockets npm 包运行大量 nodejs 进程来完成的。问题是这有点不可靠,并且会大大降低运行这些进程的机器的速度。我希望通过在单个 neko 进程中运行的线程来解决这个问题。

但是,我遇到了一个我没有预料到的问题——haxe 中对 SSL/TLS 的非常尴尬的支持(或缺乏)。据我所知,唯一可用的 native OpenSSL 包装器是 hxssl haxelib。我安装了它,但它仍然不能与 WebSockets 一起使用,所以我将问题追溯到一个更简单的案例——只有一个 HTTPS 连接,如下所示:

import haxe.Http;

class Main {
    public static function main(){
        var http = new Http("https://www.facebook.com/");
        http.certFolder = 'certs';
        http.certFile = 'certs/ca-certificates.crt';

        http.setHeader("Accept", "text/html,application/xhtml+xml,application/xml");
        http.setHeader("Accept-Language", "en-US");
        http.setHeader("Cache-Control", "max-age=0");
        http.setHeader("Connection", "close");
        http.setHeader("DNT", "1");
        http.setHeader("Upgrade-Insecure-Requests", "1");
        http.setHeader("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36");

        http.onData = function(data:String){
            Sys.println("Data: " + data.substr(0, 50) + " ...");
        }
        http.onError = function(msg:String){
            Sys.println("Error: " + msg);
        }
        http.onStatus = function(status:Int){
            Sys.println("Status: " + status);
        }
        http.request(false);
    }
}

问题是有时这个输出很简单:

Status: 200
Error: Custom((1) : An unknown error has occurred.)

最糟糕的是这种情况发生的随机性。有时它会连续发生多次,即使我不重建项目也是如此。我目前正在 OS X 机器上运行它。

certs 文件夹中充满了从最新 Ubuntu 服务器上的证书复制的证书。我试过不使用 certFoldercertFile 行,但结果几乎相同。

关于什么可能导致这种情况的任何想法?编写一个更好的 OpenSSL 包装器/ native 实现可能是不可能的,我有点时间紧迫。我尝试了上面的 cpp 构建,但使用 Sockets 代码失败了,我也不确定我是否想走那条路。

最佳答案

也许您可以尝试即将发布的 3.3 版本的 RC,它内置了对 SSL/TLS 的 Neko/Hxcpp 支持。

关于ssl - Neko hxssl 不适用于 HTTPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37590739/

相关文章:

linux - 如何使用 minGW 交叉编译 Haxe/OpenFL 生成的源代码?

ubuntu - 如何将 Haxe 项目与 Nape 连接

rest - 如何从 Haxe/Neko 发送 HTTP PUT 请求?

ssl - 当 TLS 和 SSL 不同并且 TLS 与 SSL 相比是新的时,为什么 IIS 不显示启用 tls 的特定设置

python - 使用请求时握手错误

javascript - 引用错误: SomeName is not defined (exposing class in Haxe)

java - 无法在 Xerces 或 Neko 中的节点上调用 getElementsByTagName?

haxe - 是否可以将 Flashdevelop 项目从 Openfl 移植到 Android?

tomcat - Grails 3 和 Spring Security LDAP 未加密流量

authentication - Apache Tomcat SSL 问题