如何从Haxe的http.customRequest获取数据而不会崩溃?

时间:2018-09-10 15:47:10

标签: haxe

预警:我是Haxe的新手。

我正在尝试使用http.customRequest(以稍后发送PUT和DELETE请求为目的)。但是,当我尝试访问结果字节时,使用C ++会出现分段错误,而使用Java会出现NullPointerException。

我已经在Google上搜索了customRequest的其他用途,但我所做的似乎没有错,但显然是错的。

class Main {
    static function main() {
        var req = new haxe.Http("https://httpbin.org/put");
        var responseBytes = new haxe.io.BytesOutput();

        req.onError = function(err) {
            trace("onError");
            trace(err); // Java says NullPointerException
        };

        req.onStatus = function(status) {
            trace("About to get bytes");

            // Removing these lines prevents the errors
            var b = responseBytes.getBytes();
            trace("Got the bytes");
            trace(b.length); // Shouldn't be empty, but is
        };

        req.customRequest(false, responseBytes, null, "PUT");
    }
}

我已经在当前版本和HEAD(通过Brew)中进行了尝试。

我认为我的命令行非常基本:

$ haxe -cp src -main Main -java bin/java
$ java -jar bin/java/Main.jar
src/Main.hx:12: About to get bytes
src/Main.hx:16: Got the bytes
src/Main.hx:17: 0
src/Main.hx:7: onError
src/Main.hx:8: java.lang.NullPointerException

$ haxe -cp src -main Main -cpp bin/cpp
$ ./bin/cpp/Main
src/Main.hx:12: About to get bytes
src/Main.hx:16: Got the bytes
src/Main.hx:17: 0
[1]    54544 segmentation fault  ./bin/cpp/Main

如果有用,这是Python的不同输出:

$ haxe -cp src -main Main -python bin/Main.py
$ python3 bin/Main.py
onError
True
About to trace err
SSLError(1, '[SSL: TLSV1_ALERT_INTERNAL_ERROR] tlsv1 alert internal error (_ssl.c:1045)')

我非常感谢任何指导。 TIA

({Reposted,来自Haxe论坛,我没有回复。)

1 个答案:

答案 0 :(得分:3)

那是一个非常有趣的交互,这是顺序发生的:

  • sys.Http收到响应并致电onStatus()
  • 您调用responseBytes.getBytes(),最终使haxe.io.BytesBuffer.getBytes()中的内部缓冲区无效。该方法的文档状态为“一旦调用,将无法再使用缓冲区”,因为它将内部缓冲区b设置为null
  • 然后,Http类尝试写入不再有效的同一缓冲区。
  • 由于在整个逻辑中存在一个包罗万象的内容,因此由于空引用而调用onError()回调。

传递给onStatus()的状态代码为200(确定),因此除了getBytes()调用之外,该请求似乎可以正常工作。根据{{​​3}},data对于此特定请求为空。