Snippets: Java: Apache HttpComponents: Read HTTP Request Body into A String

20th August 2020 at 2:19pm

这段代码演示如何将一个 HttpRequestBase 的请求体 body(如果有),转入到一个 String 中。

public static String getRequestBody(HttpRequestBase request) {
    if (request instanceof HttpEntityEnclosingRequest) {
        // 有些 request 是不带 body 的,比如 HTTP GET 请求;
        // 如果 request 实现了 HttpEntityEnclosingRequest,说明它是 POST / PATCH / PUT / DELETE 请求,这类请求可以带请求体
        HttpEntity entity = ((HttpEntityEnclosingRequest) request).getEntity();
        
        // HttpEntity 是一个 InputStream。如果它不是 repeatable 的,它无法被重复消费,那么大部分情况下不应该调用 EntityUtils.toString 去消费它
        if (entity.isRepeatable()) {
            return EntityUtils.toString(entity);
        }
    }
}