Когда я выполняю следующую Java-программу, иногда я получаю пустой ответ , иногда я получаю реальное (перенаправленное) содержимое .
ByteArrayOutputStream output = new ByteArrayOutputStream();
URL url = new URL( "https://stackoverflow.com/questions/84629" );
IOUtils.copy( url.openStream(), output );
System.out.println( output.toString() );
URL https://stackoverflow.com/questions/84629 - это перенаправление на Какой ваш любимый мультфильм "программист"? .
Я просмотрел другие вопросы SO и попытался использовать предложенный HttpUrlConnection
, но результат был тот же. Код ответа всегда 200, но иногда есть правильный вывод HTML, иногда это просто пустая строка.
Можете ли вы объяснить, что здесь происходит?
EDIT
Вот код без общих Apache:
ByteArrayOutputStream output = new ByteArrayOutputStream();
URL url = new URI( "https://stackoverflow.com/questions/84629" ).toURL();
InputStream openStream = url.openStream();
byte[] buffer = new byte[ 1024 ];
int size = 0;
while( (size = openStream.read( buffer ) ) != -1 ) {
output.write( buffer, 0, size );
}
System.out.println( output.toString() );
Я использую Windows XP и Java 1.6.0_17.
Я захватил трафик с помощью wireshark:
GET /questions/84629 HTTP/1.1
User-Agent: Java/1.6.0_17
Host: stackoverflow.com
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
HTTP/1.1 200 OK
Cache-Control: private
Server: Microsoft-IIS/7.0
Date: Tue, 10 Nov 2009 22:42:42 GMT
Content-Length: 0