HTTP-GET を、http://www.google.co.jp/ に投げると、チャンク形式の転送である Transfer-Encoding: chunked が、
HTTPヘッダに付いている。
でも、Apache component HttpClient で実行して Entity の先頭にチャンクサイズは見当たらない。
HttpClient は、以下のように用意する。
HttpResponseInterceptor を使う方法をよく見かける。
この方法を見て思ったのは、通常でもHttpClient の execute の戻り値でHttpResponse を受けるよりも
インターセプトした方が良いのでは?と最近考えてる。
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpException;
import org.apache.http.HttpResponse;
import org.apache.http.HttpResponseInterceptor;
import org.apache.http.ProtocolVersion;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.io.ChunkedInputStream;
import org.apache.http.protocol.HttpContext;
//
//
HttpGet request = new HttpGet(url);
request.addHeader("Connection","Keep-Alive");
DefaultHttpClient httpClient = new DefaultHttpClient();
httpClient.addResponseInterceptor(new HttpResponseInterceptor(){
@Override
public void process(HttpResponse response,HttpContext context) throws HttpException,IOException{
int statusCode = response.getStatusLine().getStatusCode();
ProtocolVersion procolversion = response.getProtocolVersion();
String protcol = procolversion.getProtocol();
String protcolNumber = String.format("%d.%d",procolversion.getMajor(),procolversion.getMinor());
HttpEntity entity = response.getEntity();
if (entity != null){
InputStream inputStream = entity.getContent();
if (inputStream instanceof ChunkedInputStream){
for(Header h : *1{
// トレーラ 情報による処理
}
}
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream, 1024);
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte buffer[] = new byte[1024];
int size = 0;
while*2 != -1){
out.write(buffer, 0, size);
out.flush();
}
out.close();
}
}
});
try{
httpClient.execute(request);
}catch(Exception e){
//
}
=======================
しかし、Google 検索ページをこれで要求して実行しても、
inputStream instanceof ChunkedInputStream が true であるものの、
ChunkedInputStream の getFooters() の結果は空である!???