Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с чтением данных при парсинге сайта 
:(
    Опции темы
Padre
Дата 23.11.2010, 01:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 9.5.2008

Репутация: нет
Всего: нет



Здравствуйте. 

Пишу приложение парсящее табло рейсов с сайтов Шереметьево (http://svo.aero/timetable/today/) и Домодедово (http://www.domodedovo.ru/ru/main/airindicator/flightnew/). 

Создаю объект URL с ссылкой на сайт. Далее вызываю метод openStream. После этого поток используется совместно с SAX парсером HTMLEditorKit. 

С сайтом Домодедово все это работает на ура, а вот с Шереметьево программа ведет себя странно. Сначала определенное количество запусков приложения проходят неудачно - поток содержит кракозябры в неизвестной кодировке, и длина этого текста явно меньше, чем содержимое читаемой страницы. Потом происходит неожиданное - несколько удачных запусков, возвращаются желаемые данные - потом снова череда неудач. От чего это зависит, проследить не удалось. 

Я пытался задавать конкретные http-заголовки через URLConnection, надеясь, что все дело в них, т.к. в браузере то все открывается нормально, но это не помогло. Ситуация не изменилась. 

В чем может быть проблема?
PM MAIL   Вверх
Su_
Дата 23.11.2010, 02:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 386
Регистрация: 1.8.2007

Репутация: нет
Всего: нет



Может я ошибаюсь, но оба сайта отвечают модели DOM?


--------------------
user posted image

PM MAIL WWW   Вверх
Padre
Дата 23.11.2010, 03:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 9.5.2008

Репутация: нет
Всего: нет



Цитата

Может я ошибаюсь, но оба сайта отвечают модели DOM?


Да вроде бы все ок. А, если нет, то как это может повлиять?

Добавлено @ 03:25
Я попробовал проанализировать обмен данными.
Получаются такие заголовки: 

От проги к Домодедово: 
Код

Request Method: GET 
Request URI: /ru/main/airindicator/flightnew/index.asp?v=-24 
Request Version: HTTP/1.1 
Cache-Control: no-cache\r\n 
Pragma: no-cache\r\n 
User-Agent: Java/1.6.0_21\r\n 
Host: www.domodedovo.ru\r\n 
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2\r\n 
Connection: keep-alive\r\n 
\r\n

После этого идет обмен пакетами. В конце приходит ответ от Домодедово: 
Код

Request Version: HTTP/1.1 
Response Code: 200 
Date: Mon, 22 Nov 2010 23:21:54 GMT\r\n 
Server: Microsoft-IIS/6.0\r\n 
X-Powered-By: ASP.NET\r\n 
Content-Length: 76360\r\n 
Content-Type: text/html\r\n 
Expires: Mon, 22 Nov 2010 21:41:54 GMT\r\n 
Set-Cookie: ASPSESSIONIDSASQCQAD=BALMMJBBBLDEALAPPDCCBCJB; path=/\r\n 
Cache-control: private\r\n 
\r\n

Итог: все замечательно. 

От проги к Шереметьево: 
Код

Request Method: GET 
Request URI: /timetable/today/ 
Request Version: HTTP/1.1 
Cache-Control: no-cache\r\n 
Pragma: no-cache\r\n 
User-Agent: Java/1.6.0_21\r\n 
Host: svo.aero\r\n 
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2\r\n 
Connection: keep-alive\r\n 
\r\n

Обмен пакетами. Ответ: 
Код

Request Version: HTTP/1.1 
Response Code: 200 
Date: Mon, 22 Nov 2010 23:43:53 GMT\r\n 
Server: Apache/1.3.37 (Unix) mod_deflate/1.0.21 mod_accel/1.0.34 mod_ssl/2.8.28 OpenSSL/0.9.8e rus/PL30.22\r\n 
Expires: Mon, 22 Nov 2010 23:44:44 GMT\r\n 
Content-Encoding: gzip\r\n 
Connection: close\r\n 
Transfer-Encoding: chunked\r\n 
\r\n

Посмотрел содержимое ответа - все ок, в нем тело страницы, кодировка нормальная. Вот только все пережатое, судя по заголовку. Почему так - хз. В проге, соответственно, выводится не то. 

При редком удачном соединении после запроса к серверу и довольно длинного обмена пакетами (в несколько раз больше, чем в предыдущем случае) ответ такой: 
Код

Request Version: HTTP/1.1 
Response Code: 200 
Date: Mon, 22 Nov 2010 23:53:50 GMT\r\n 
Server: Apache/1.3.37 (Unix) mod_deflate/1.0.21 mod_accel/1.0.34 mod_ssl/2.8.28 OpenSSL/0.9.8e rus/PL30.22\r\n 
Expires: Mon, 22 Nov 2010 23:54:06 GMT\r\n 
Content-Length: 317549\r\n 
Content-Type: text/html; charset=WINDOWS-1251\r\n 
Connection: close\r\n 
\r\n

Далее следует тело страницы, где все отлично. 

Т.е. в большей части случаев отправляемое сервером тело страницы дополнительно архивируется, а редко (когда все работает верно) - нет. Я правильно понял?
В чем тайный смысл происходящего?

Это сообщение отредактировал(а) Padre - 23.11.2010, 03:26
PM MAIL   Вверх
COVD
Дата 23.11.2010, 05:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 11
Всего: 43



Когда ответ на запрос возвращается порциями, то сервер об этом сообщает хедером 
Цитата

Transfer-Encoding: chunked\r\n

Браузер это понимает. А ваша программа? Каждая порция данных начинается с размера порции в восьмиричном коде. 

Если же ответ отправляется единым куском, то его длина сообщается в хедере: 
Цитата

Content-Length: 317549\r\n


и вдобавок ( "контрольный выстрел"), соединение просто закрывается сервером в конце данных:
Цитата

Connection: close\r\n 


Вряд ли "архивируется". Просто вы режим "chunked" игнорируете. Скорее всего. 

Цитата

В чем тайный смысл происходящего?

Когда размер ответа серверу заранее не известен, то он отправляет данные порциями ( чанками ), по мере их поступления из базы данных или еще откуда-то. Это обычно включается автоматически, когда в буфере накапливается примерно 1.5 кб , т.е. один пакет.   

Это сообщение отредактировал(а) COVD - 23.11.2010, 06:03
PM MAIL   Вверх
Padre
Дата 23.11.2010, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 9.5.2008

Репутация: нет
Всего: нет



Спасибо за объяснение. 

Цитата

Вряд ли "архивируется". Просто вы режим "chunked" игнорируете. Скорее всего.

Мне кажется, что Content-Encoding: gzip как раз указывает на то, что информация дополнительно сжимается.
PM MAIL   Вверх
COVD
Дата 23.11.2010, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 11
Всего: 43



Цитата

gzip как раз указывает 

Да, я не заметил.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0433 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.