如何在不崩溃的情况下从 Haxe 的 http.customRequest 获取数据?
How do a get the data from Haxe's http.customRequest without crashing?
预警:我是 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
(Reposted 来自 Haxe 论坛,我在那里没有得到回复。)
这是一个非常有趣的互动,以下是按顺序发生的事情:
sys.Http
收到响应并调用 onStatus()
.
- 您调用
responseBytes.getBytes()
,最终使 haxe.io.BytesBuffer.getBytes()
中的内部缓冲区无效。该方法的文档状态 "Once called, the buffer can no longer be used",因为它将内部缓冲区 b
设置为 null
。
- 然后
Http
class 尝试写入不再有效的同一个缓冲区。
- 由于整个逻辑都有包罗万象,因此
onError()
回调因空引用而被调用。
传递给 onStatus()
的状态代码是 200(正常),因此除了 getBytes()
调用之外,请求似乎按预期工作。根据 apitester.com,data
对于此特定请求是空的。
预警:我是 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
(Reposted 来自 Haxe 论坛,我在那里没有得到回复。)
这是一个非常有趣的互动,以下是按顺序发生的事情:
sys.Http
收到响应并调用onStatus()
.- 您调用
responseBytes.getBytes()
,最终使haxe.io.BytesBuffer.getBytes()
中的内部缓冲区无效。该方法的文档状态 "Once called, the buffer can no longer be used",因为它将内部缓冲区b
设置为null
。 - 然后
Http
class 尝试写入不再有效的同一个缓冲区。 - 由于整个逻辑都有包罗万象,因此
onError()
回调因空引用而被调用。
传递给 onStatus()
的状态代码是 200(正常),因此除了 getBytes()
调用之外,请求似乎按预期工作。根据 apitester.com,data
对于此特定请求是空的。