从 HTTPClient 3.1 迁移到 4.3.3,Method.getResponseBody(int)
Migration from HTTPClient 3.1 to 4.3.3, Method.getResponseBody(int)
我正在将使用 HTTPClient 3.1 的旧软件更新为使用 HTTPClient 4.3.3。
我注意到在旧代码中有一个特定的要求:当获取远程 page/resource 时,客户端能够验证维度,如果内容太大而无需下载完整资源则生成异常。
这是通过以下方式完成的:
int status = client.executeMethod(method);
...
byte[] responseBody= method.getResponseBody(maxAllowedSize+1);
请注意 maxAllowedSize 后的“+1”:要求证明原始 page/resource 实际上太大了。
如果使用了最后一个字节,则抛出异常;否则页面已处理。
我试图在 HTTPClient 4.3.3 中实现相同的功能,但我找不到从服务器仅下载定义数量的字节的方法...这对我的应用程序至关重要。
你能帮助我吗?提前谢谢你。
旧 getResponseBody(int) 方法的 Javadoc:https://hc.apache.org/httpclient-3.x/apidocs/org/apache/commons/httpclient/HttpMethodBase.html#getResponseBody(int)
通常应该直接从内容流中使用内容,而不是将其缓冲在中间缓冲区中,但这与 4.3 API 大致相同:
CloseableHttpClient client = HttpClients.custom()
.build();
try (CloseableHttpResponse response = client.execute(new HttpGet("/"))) {
HttpEntity entity = response.getEntity();
long expectedLen = entity.getContentLength();
if (expectedLen != -1 && expectedLen > MAX_LIMIT) {
throw new IOException("Size matters!!!!");
}
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
InputStream inputStream = entity.getContent();
byte[] tmp = new byte[1024];
int chunk, total = 0;
while ((chunk = inputStream.read(tmp)) != -1) {
buffer.write(tmp, 0, chunk);
total += chunk;
if (total > MAX_LIMIT) {
throw new IOException("Size matters!!!!");
}
}
byte[] stuff = buffer.toByteArray();
}
我正在将使用 HTTPClient 3.1 的旧软件更新为使用 HTTPClient 4.3.3。 我注意到在旧代码中有一个特定的要求:当获取远程 page/resource 时,客户端能够验证维度,如果内容太大而无需下载完整资源则生成异常。 这是通过以下方式完成的:
int status = client.executeMethod(method);
...
byte[] responseBody= method.getResponseBody(maxAllowedSize+1);
请注意 maxAllowedSize 后的“+1”:要求证明原始 page/resource 实际上太大了。 如果使用了最后一个字节,则抛出异常;否则页面已处理。
我试图在 HTTPClient 4.3.3 中实现相同的功能,但我找不到从服务器仅下载定义数量的字节的方法...这对我的应用程序至关重要。 你能帮助我吗?提前谢谢你。
旧 getResponseBody(int) 方法的 Javadoc:https://hc.apache.org/httpclient-3.x/apidocs/org/apache/commons/httpclient/HttpMethodBase.html#getResponseBody(int)
通常应该直接从内容流中使用内容,而不是将其缓冲在中间缓冲区中,但这与 4.3 API 大致相同:
CloseableHttpClient client = HttpClients.custom()
.build();
try (CloseableHttpResponse response = client.execute(new HttpGet("/"))) {
HttpEntity entity = response.getEntity();
long expectedLen = entity.getContentLength();
if (expectedLen != -1 && expectedLen > MAX_LIMIT) {
throw new IOException("Size matters!!!!");
}
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
InputStream inputStream = entity.getContent();
byte[] tmp = new byte[1024];
int chunk, total = 0;
while ((chunk = inputStream.read(tmp)) != -1) {
buffer.write(tmp, 0, chunk);
total += chunk;
if (total > MAX_LIMIT) {
throw new IOException("Size matters!!!!");
}
}
byte[] stuff = buffer.toByteArray();
}