5

我有

 HttpResponse response = httpclient.execute(httpget);

我的方法可以通过设备和 PC 上的套接字传输 byte[],那么如何将 HttpResponse 转换为 byte[] 而不是返回 HttpResponse?

4

3 回答 3

5

这不简单。

如果您只是想要响应的主体,那么您可以这样做来获取它

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    response.getEntity().writeTo(baos);
    byte[] bytes = baos.toByteArray();

然后您可以将内容添加到另一个HttpResponse对象,如下所示:

    HttpResponse response = ...
    response.setEntity(new ByteArrayEntity(bytes));

但这可能还不够好,因为您很可能需要原始响应中的所有其他内容;例如状态行和标题(包括原始内容类型和长度)。

如果您想处理整个响应,您似乎有两种选择:

  • 您可以将响应分开(例如获取状态行,迭代标题)并手动序列化,然后在另一端执行相反的操作。

  • 您可以使用HttpResponseWriter来进行序列化并HttpResponseParser在另一端重建响应。这是解释here

于 2013-07-19T09:51:36.850 回答
0

您需要将其作为流获取:response.getEntity().getContent()

然后您可以直接将流读入byte[].

于 2013-07-19T08:51:07.313 回答
0

使用 java11:

var client = HttpClient.newBuilder().build();
var request = HttpRequest.newBuilder()
            .uri(URI.create("https://yourdomain.test")).GET().build();
HttpResponse<byte[]> response = client.send(request, HttpResponse.BodyHandlers.ofByteArray());
if (200 == response.statusCode()) {
            byte[] bytes = response.body();
}
于 2021-03-09T20:22:28.837 回答