Apache HttpClient 4.2 (Java) を使用して、一連の Web ページを取得しようとしています。問題は、一連の HttpEntities の一部に空のコンテンツがあることです。つまり、次のようになります。
is = new ByteArrayInputStream(EntityUtils.toByteArray(entity))
System.out.println(response.getStatusLine());
System.out.println(is.available());
HTTP/1.1 200 OK と 0 を示します。その他の場合は、HTTP/1.1 200 OK と 64344 などを示します。コードを再起動すると、シリーズの別の HttpEntities が空になる場合があります。コンテンツがゼロ以外になるまで、同じプログラムで Web ページを取得する再帰を行いました。いくつかの呼び出しの後、取得しました... Win'XP でプログラムを実行しています。
コード自体 (再帰なし):
public InputStream loadURL(String url) throws IOException {
PoolingClientConnectionManager connManager = new PoolingClientConnectionManager();
DefaultHttpClient httpclient = new DefaultHttpClient(connManager);
InputStream is = null;
try {
HttpGet httpget = new HttpGet(url);
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
if (entity != null) {
try {
System.out.println("========================================");
is = new ByteArrayInputStream(EntityUtils.toByteArray(entity));
System.out.println(is.available());
System.out.println(response.getStatusLine());
System.out.println("========================================");
} catch (IOException ex) {
throw ex;
} catch (RuntimeException ex) {
httpget.abort();
throw ex;
}
}
} catch (ClientProtocolException ex) {
throw ex;
} finally {
httpclient.getConnectionManager().shutdown();
}
return is;
}
InputStream は外部コードで閉じられています。