Получение исходного кода для следующей страницы с использованием Java - PullRequest
0 голосов
/ 25 апреля 2011

Я пытаюсь получить исходный код для следующей страницы: http://www.amazon.com/gp/offer-listing/082470732X/ref=dp_olp_0?ie=UTF8&redirect=true&condition=all (Обратите внимание, что Amazon переместит вас на другую страницу, если вы нажмете на ссылку. Чтобы перейти на страницу, которую мне интересно читатьПожалуйста, скопируйте ссылку и вставьте ее в пустую вкладку в вашем браузере. Спасибо!)

Обычно используя API java.net, я могу получить исходный код для большинства URL-адресов практически без проблем, однако длявыше по ссылке ничего не получаю.Оказалось, что входной поток, сгенерированный соединением, закодирован gzip, поэтому я попробовал следующее:

URL url = new URL(urlString);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
InputStream is = urlConnection.getInputStream();
HttpURLConnection.setFollowRedirects(true);
urlConnection.setRequestProperty("Accept-Encoding", "gzip, deflate");
String encoding = urlConnection.getContentEncoding();
if (encoding != null && encoding.equalsIgnoreCase("gzip")) {
     is = new GZIPInputStream(is);
} else if (encoding != null && encoding.equalsIgnoreCase("deflate")) {
     is = new InflaterInputStream((is), new Inflater(true));
}

Однако на этот раз я определенно получаю следующую ошибку:

java.io.EOFException
at java.util.zip.GZIPInputStream.readUByte(GZIPInputStream.java:249)
at java.util.zip.GZIPInputStream.readUShort(GZIPInputStream.java:239)
at java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:142)
at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:58)
at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:67)
at domain.logic.ItemScraper.loadURL(ItemScraper.java:405)
at domain.logic.ItemScraper.main(ItemScraper.java:510)

Кто-нибудь может увидеть мою ошибку?Есть ли другой способ прочитать эту страницу?Может кто-нибудь объяснить мне, почему мой браузер (firefox) может читать его, но я не могу прочитать исходный код с помощью Java?

Заранее спасибо, с наилучшими пожеланиями,

Ответы [ 2 ]

0 голосов
/ 25 апреля 2011

Вместо

is = new GZIPInputStream(is);

попробуйте

is = new GZIPInputStream(urlConnection.getInputStream());

Что касается EOFException, если вы добавите

urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.50 Safari/534.24");

, оно исчезнет.

0 голосов
/ 25 апреля 2011

Вы можете использовать стандартный BufferedReader для чтения ответа веб-сервера на заданный URL.

URLIn = new BufferedReader(new InputStreamReader(new URL(URLOrFilename).openStream()));

Затем используйте ...

while ((incomingLine = URLIn.readLine()) != null) {
 ...
}

..., чтобы получитьответ.

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