预警:我对Haxe很新。
我正在尝试使用http.customRequest(以便稍后发出PUT和DELETE请求)。但是当我尝试访问结果字节时,我得到了C ++的分段错误和Java的NullPointerException。
我已经搜索了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
(来自Haxe论坛的Reposted,我没有回复。)
这是一个非常有趣的互动,这是按顺序发生的事情:
sys.Http
收到回复并致电onStatus()
。responseBytes.getBytes()
,它最终使haxe.io.BytesBuffer.getBytes()
中的内部缓冲区无效。该方法的文档声明“一旦调用,就不能再使用缓冲区”,因为它将内部缓冲区b
设置为null
。Http
类尝试写入相同的缓冲区,该缓冲区不再有效。onError()
回调。传递给onStatus()
的状态代码是200(OK),因此除了getBytes()
调用之外,请求似乎按预期工作。根据apitester.com,data
对于这个特殊要求是空的。