java - 使用 Apache HttpComponents 时的响应大小限制

标签 java apache-httpcomponents

我正在将一些代码从 Http Client 3.x 库转换为 Http Components 4.x 库。旧代码包含一项检查,以确保响应不超过特定大小。这在 Http Client 3.x 中相当容易做到,因为您可以使用 getResponseBodyAsStream() 方法从响应中获取流并确定何时超出大小。我在 Http Components 中找不到类似的方法。

以下是旧代码,作为我正在尝试执行的操作的示例:

private static final long RESPONSE_SIZE_LIMIT = 1024 * 1024 * 10;
private static final int READ_BUFFER_SIZE = 16384;

private static ByteArrayOutputStream readResponseBody(HttpMethodBase method)
        throws IOException {

    int len;
    byte buff[] = new byte[READ_BUFFER_SIZE];
    ByteArrayOutputStream out = null;
    InputStream in = null;
    long byteCount = 0;

    in = method.getResponseBodyAsStream();

    out = new ByteArrayOutputStream(READ_BUFFER_SIZE);

    while ((len = in.read(buff)) != -1 && byteCount <= RESPONSE_SIZE_LIMIT) {
        byteCount += len;
        out.write(buff, 0, len);
    }

    if (byteCount >= RESPONSE_SIZE_LIMIT) {
        throw new IOException(
                "Size limited exceeded reading from HTTP input stream");
    }

    return (out);

}

最佳答案

您可以使用HttpEntity.getContent()来获取InputStream来读取自己的内容。

关于java - 使用 Apache HttpComponents 时的响应大小限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12482160/

相关文章:

java - OpenSTF API POST 远程连接

java-apache http 客户端查询,涉及作为多部分发布请求的一部分提交文件

java - 编码 HttpResponse UTF-8

java 2d净重力计算

java - 将字符串的一部分作为参数传递

远程对象中 javax.json.JsonValue 的 Java RMI NoClassDefFoundError

java - 手动设置 HttpStatus 时 @ExceptionHandler 失败

java - 推荐的数字签名加密组合

java - Apache HttpClient(4.1 及更高版本): how to do basic authentication?

java - SSLPeerUnverifiedException 与 httpClient