1

Apache HttpClient を使用すると、HttpResponseIntercepter. これにより、ヘッダー属性を簡単に追加できます。しかし、取得したHttpEntitys のコンテンツを操作するにはどうすればよいでしょうか。

例として、すべてのテキストを大文字に変換したいと思います。

@Test
public void shoudConvertEverythingToUpperCase() throws ClientProtocolException, IOException
{
    final DefaultHttpClient defaultHttpClient = new DefaultHttpClient();

    defaultHttpClient.addResponseInterceptor(new HttpResponseInterceptor() {

        @Override
        public void process(final HttpResponse response, final HttpContext context) throws HttpException, IOException
        {
            final HttpEntity entity = response.getEntity();

            final HttpEntity upperCaseEntity = makeAllUppercase(entity);

            response.setEntity(upperCaseEntity);
        }

        private HttpEntity makeAllUppercase(final HttpEntity entity)
        {
            // how to uppercase everything and return the cloned HttpEntity
            return null;
        }
    });

    final HttpResponse httpResponse = defaultHttpClient.execute(new HttpGet("http://stackoverflow.com"));

    assertTrue(StringUtils.isAllUpperCase(EntityUtils.toString(httpResponse.getEntity())));
}
4

1 に答える 1

2
private HttpEntity makeAllUppercase(final HttpEntity entity)
{
    Header h = entity.getContentType();
    ContentType contentType = h != null ? ContentType.parse(h.getValue()) : ContentType.DEFAULT_TEXT;
    String content = EntityUtils.toString(entity, contentType.getCharset());
    return new StringEntity(content.toUpperCase(Locale.US), contentType);
}

これは、メモリ内のコンテンツの中間バッファリングのために最も効率的ではありませんが、最も簡潔な実装です。

于 2012-08-24T15:44:14.440 に答える