2012-08-22 58 views
1

使用Apache HttpClient,可以通过添加HttpResponseIntercepter来操作检索到的内容。有了这个,添加标题属性是很容易的。但是如何操作检索到的HttpEntity的内容呢?使用HttpResponseInterceptor处理响应

例如我喜欢将所有文本转换为大写。

@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()))); 
} 

回答

1
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); 
} 

这不是最有效的,由于在存储器内容中间缓冲,但最简洁的实现。