Как получить фрагментированные нижние колонтитулы из ответа на соединение, которое использует ThreadSafeClientConnManager? - PullRequest
2 голосов
/ 07 июля 2011

Я использую соединение, созданное ThreadSafeClientConnManager (Apache httpcomponents 4.1.1).Ответ разбивается на части (что я и ожидаю), что определяется response.getEntity (). IsChunked ()

Однако нет способа получить нижние колонтитулы / трейлеры (которые необходимы для нашего приложения).Поскольку ответ был разбит на части, я ожидал, что содержимое сущности будет иметь тип ChunkedInputStream, однако классы по умолчанию для директора запросов и исполнителей, используемые клиентом, обертывают исходную сущность ответа (которая, если посмотреть на источник httpcomponents, была бы ChunkedInputStream)в BasicManagedEntity.

Короче говоря, я больше не могу получить нижние колонтитулы / трейлеры ответа, так как BasicManagedEntity не делает базовую сущность доступной для использования.Кто-нибудь знает, как обойти это?

Для справки см .:

  • org.apache.http.impl.client.DefaultRequestDirector.java, строки 523-525
  • org.apache.http.impl.entity.EntityDeserializer.java, строки 93-96

1 Ответ

3 голосов
/ 08 июля 2011

Можно использовать перехватчик ответа HTTP, чтобы получить доступ к фрагменту содержимого потока и нижним колонтитулам ответа.

httpclient.addResponseInterceptor(new HttpResponseInterceptor() {

public void process(
        final HttpResponse response,
        final HttpContext context) throws HttpException, IOException {
    HttpEntity entity = response.getEntity();
    if (entity != null) {
        InputStream instream = entity.getContent();
        if (instream instanceof ChunkedInputStream) {
            Header[] footers = ((ChunkedInputStream) instream).getFooters();
        }
    }
}

});

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...