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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> readLine() читает строку не доконца 
:(
    Опции темы
sbd
Дата 3.2.2009, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Задача определить имя пользавателя на страничке форума
программа считывает строку за строкой методом readLine(), находит соответсвующую строку и вырезает нужное substring'ом
Ответ с сервера шлется в кодировке KOI8-R, как и указано в запросе
      
Код

String reqstr =
      "GET /showpost.php?p=" + (startpost+i) + " HTTP/1.1\n"+
      "User-Agent: agent"+
      "Host: www.site.ru\n"+
      "Accept: text/html\n"+
      "Accept-Charset: KOI8-R"+
      "\n\n";
      
        // открываем сокет и потоки к нему
      Socket soc = new Socket("www.site.ru", 80);
      OutputStream out = soc.getOutputStream();
 
     BufferedReader in = new BufferedReader(new InputStreamReader(soc.getInputStream()));       

        // пишем запрос в сокет
      byte buf[] = reqstr.getBytes();            
      out.write(buf);

                       // читаем ответ в цикле по строчке
      while(true){
         s=in.readLine();
         if(s.indexOf("</body>") != -1) break;
         
         if(s.indexOf("<a class=\"bigusername\"") != -1){            // если содержится такая строка...
                   // s должна здесь быть равна 
                                 // читаем имя пользователя между указаными символами

            poster=s.substring(s.indexOf(">")+1, s.indexOf("</a"));    
         }
      }


проблема в том что readLine() почему-то не читает строку доконца, понятия не имею в чем может крыться проблема



PM MAIL   Вверх
LSD
Дата 3.2.2009, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



У тебя явно проблемы в коде поиска нужного элемента, а не в readLine(). Например с таким HTML, твой код не сработает:
Код

<br/> <a class="bigusername">User</a>

с таким тоже
Код

<a class="bigusername">
User
</a>


Лучше напиши регулярное выражение и используй его (для всего текста сразу, а не построчно).

Добавлено через 1 минуту и 19 секунд
Или вообще используй готовый парсер HTML.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
sbd
Дата 3.2.2009, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(LSD @ 3.2.2009,  14:28)
У тебя явно проблемы в коде поиска нужного элемента, а не в readLine(). Например с таким HTML, твой код не сработает:
Код

<br/> <a class="bigusername">User</a>

с таким тоже
Код

<a class="bigusername">
User
</a>


Лучше напиши регулярное выражение и используй его (для всего текста сразу, а не построчно).

Добавлено @ 14:29
Или вообще используй готовый парсер HTML.

строка там такая:
                    <a class="bigusername" href="member.php?amp;u=102001">USER</a>
и все это в одну строку

рег выражения тоже накладно для производительности будет

вообще эта проблема то появляется то исчезает, то есть то он читает все, то выдает что-то типа 
<a class="bigusername" href="member.php?amp;u=102001">USE
или <a class="bigusername" href="member.php?amp;u=102001">USER</

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


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(sbd @  3.2.2009,  14:56 Найти цитируемый пост)
вообще эта проблема то появляется то исчезает, то есть то он читает все, то выдает что-то типа 
<a class="bigusername" href="member.php?amp;u=102001">USE
или <a class="bigusername" href="member.php?amp;u=102001">USER</

в чем же может быть проблема? 

Ну уж точно не в readLine() smile

Пиши в лог текстовую строку для которой он ищет имя пользователя и тогда уже можно будет что-то определённое сказать. Но как минимум проблема в:
Код

poster=s.substring(s.indexOf(">")+1, s.indexOf("</a"));

1. s.indexOf(">") возвращает индекс первого встречного элемента, т.е. для
Код

<br/> <a class="bigusername">User</a>

получишь фигню. 

2. Аналогично s.indexOf("</a"), для
Код

<a ....>...</a> ... <a class="bigusername">User</a>

вернет фигню.

Я уж не говорю, что если они поставят перенос строки, весь твой код рухнет.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
sbd
Дата 4.2.2009, 04:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



лог в добавленом файле

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  log.txt 22,76 Kb
PM MAIL   Вверх
sbd
Дата 4.2.2009, 04:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



в лог писал строку s+"\n" и ошибки строки 
Код

poster=s.substring(s.indexOf(">")+1, s.indexOf("</a"));  


зы: в том то и дело что с тегами все впорядке. я не такой уж нуб smile ). Как видишь, строки там нормальные. Прикол в том, что программа сперва отлично работает, потом слетает причем на одних и тех же пользователях и в одинаковых местах. 
Может быть, проблема в кодировке, попробую что-нибудь изменить

ззыЖ прога задумывалась как обычная безделушка, а тут такие траблы, ни че непонимаю  smile 
PM MAIL   Вверх
LSD
Дата 4.2.2009, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(sbd @  4.2.2009,  04:37 Найти цитируемый пост)
Как видишь, строки там нормальные.

Как я вижу, ошибки там как раз в тех случаях про которые я говорил:
Код

                <a class="bigusername" href="member.php?amp;u=97697">Вильям Во
java.lang.StringIndexOutOfBoundsException: String index out of range: -93
...
                <a class="bigusername" href="member.php?amp;u=348209">Митя я</
java.lang.StringIndexOutOfBoundsException: String index out of range: -94
...
                <a class="bigusername" href="member.php?s=f54535588854deb1398bd
java.lang.StringIndexOutOfBoundsException: String index out of range: -1

у тебя в строке нет закрывающего тега </a>.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
sbd
Дата 4.2.2009, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(LSD @ 4.2.2009,  12:56)
Цитата(sbd @  4.2.2009,  04:37 Найти цитируемый пост)
Как видишь, строки там нормальные.

Как я вижу, ошибки там как раз в тех случаях про которые я говорил:
Код

                <a class="bigusername" href="member.php?amp;u=97697">Вильям Во
java.lang.StringIndexOutOfBoundsException: String index out of range: -93
...
                <a class="bigusername" href="member.php?amp;u=348209">Митя я</
java.lang.StringIndexOutOfBoundsException: String index out of range: -94
...
                <a class="bigusername" href="member.php?s=f54535588854deb1398bd
java.lang.StringIndexOutOfBoundsException: String index out of range: -1

у тебя в строке нет закрывающего тега </a>.

Я о том и говорю  smile   Вот именно его нет, потому-что ридлайн мне возвращает не всю строку smile  
Эти строки, считаные моей программой. На самом деле, там все в порядке, я открывал те же страницы браузером, все теги на месте
PM MAIL   Вверх
LSD
Дата 5.2.2009, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(sbd @  4.2.2009,  15:29 Найти цитируемый пост)
Я о том и говорю  smile   Вот именно его нет, потому-что ридлайн мне возвращает не всю строку smile  
Эти строки, считаные моей программой. На самом деле, там все в порядке, я открывал те же страницы браузером, все теги на месте 

Ты видел код сервера, чтобы быть уверенным в том, что он гарантированно возвращает один и тот же HTML по одним и тем же запросам?

Возьми TeeInputStream и параллельно пиши полученный HTML в файл. А потом уже можно будет что-то с уверенностью сказать.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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