我有
HttpResponse response = httpclient.execute(httpget);
我的方法可以通过设备和 PC 上的套接字传输 byte[],那么如何将 HttpResponse 转换为 byte[] 而不是返回 HttpResponse?
这不简单。
如果您只是想要响应的主体,那么您可以这样做来获取它
ByteArrayOutputStream baos = new ByteArrayOutputStream();
response.getEntity().writeTo(baos);
byte[] bytes = baos.toByteArray();
然后您可以将内容添加到另一个HttpResponse
对象,如下所示:
HttpResponse response = ...
response.setEntity(new ByteArrayEntity(bytes));
但这可能还不够好,因为您很可能需要原始响应中的所有其他内容;例如状态行和标题(包括原始内容类型和长度)。
如果您想处理整个响应,您似乎有两种选择:
您可以将响应分开(例如获取状态行,迭代标题)并手动序列化,然后在另一端执行相反的操作。
您可以使用HttpResponseWriter
来进行序列化并HttpResponseParser
在另一端重建响应。这是解释here。
您需要将其作为流获取:response.getEntity().getContent()
然后您可以直接将流读入byte[]
.
使用 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();
}