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

时间:2012-09-18 17:36:55

标签: 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);

}

1 个答案:

答案 0 :(得分:1)

您可以使用 HttpEntity.getContent()来获取 InputStream 以便自己阅读。