2011-07-07 5 views
2

私は、ThreadSafeClientConnManager(Apache httpcomponents 4.1.1)によって作成された接続を使用しています。応答はチャンクされていますが、response.getEntity()によって決定されます。isChunked()ThreadSafeClientConnManagerを使用する接続の応答からチャンク付きフッターを取得するにはどうすればよいですか?

しかし、フッタ/トレーラを取得する方法はありません。応答がチャンクされているので、エンティティの内容がChunkedInputStream型であると期待しますが、クライアントが使用するデフォルトのリクエストディレクタとエグゼキュータのクラスは、元のレスポンスエンティティ(httpcomponentsソースを見るとChunkedInputStreamであった) BasicManagedEntityに格納されます。

要するに、BasicManagedEntityは基礎となるエンティティを使用可能にしないため、フッター/トレーラーを応答から外すことはできません。誰かがこれを回避する方法を知っていますか?

参考のため、参照:

  • org.apache.http.impl.client.DefaultRequestDirector.java、ライン523から525
  • org.apache.http.impl.entity.EntityDeserializer.java、行93-96
+0

サイドノート:HttpClient、HttpResponse、およびHttpRequestExecutorのさまざまなサブクラスとラッパーを実装することでこれを修正しましたが、私はまだより良いソリューションを探しています! – Brian

答えて

3

チャンクされたコンテンツストリームとレスポンスフッターにアクセスするために、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(); 
     } 
    } 
} 

});

関連する問題