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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как из Java клиента нажать button на html form? 
V
    Опции темы
tigerkvv
Дата 27.7.2010, 06:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть сторонний сервер с веб интерфейсом для ввода данных. Есть собственное ПО и СУБД.
Задача. Отгружать в конце дня накопленные данные из нашего сервера на центральный через эту веб форму.
(согласен - реализация через одно место, но пока центр не напишет новое ПО приходится ручками вводить себе и потом им)
Все бы ничего, но на их html страничке две формы: первая содержит поля для ввода данных, вторая кнопку без submit - которая вызывает их процедуру проверки данных и загрузку в центральный сервер.

Выглядит эта страничка так:
Код

<!--форма для ввода данных-->
<FORM  ENCTYPE="multipart/form-data" METHOD=post ACTION="index.php" NAME="formInput">
<input type="text" name="par_in[e3][0][e5][e8][e11]" tabindex="10" value="">
...
</FORM>
<!--форма с кнопкой -->
<FORM NAME='formSubmit'>              
           <INPUT TYPE='button' class='BUTTON' tabindex='50' VALUE='Ввод'
            ONCLICK='if(checkpatternagain())with(document.forms.formInput){toimik.value=document.forms.formSubmit.toimik.value;salastada.value=(document.forms.formSubmit.salastada.checked ? 1 : 0);operation.value="search";target="_self";submit();}'>
</FORM>
...


Первую форму я без проблем заполняю, но ввод данных не происходит. В выходном потоке получается эта же страничка с заполненными полями первой формы.
Как программно нажать кнопку во второй форме после заполнения первой?



Это сообщение отредактировал(а) tigerkvv - 28.7.2010, 18:39
PM MAIL   Вверх
AntonSaburov
Дата 27.7.2010, 16:52 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



А не проще ли посмотреть, что за HTTP запрос формируется и делать его прямо из приложения ?
PM MAIL WWW ICQ   Вверх
tigerkvv
Дата 28.7.2010, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Конечно проще, сразу смотрел, но функции checkpatternagain нигде в коде нет и что она делает конкретно - загадка.

Уточню, выше писал что запрос с данными для первой формы (данные которые надо отправить) делается нормально. При его выполнении заполняются поля с данными, но отправка не происходит как обычно в более простых случаях. Сервер возвращает ту же форму для заполнения данных но с моими данными. А вот заставить сервер принять данные в обработку получается только нажав на кнопку во второй форме.

Как все-таки нажать на эту кнопку программно? Или как после заполнения выполнить скрипт который в ней прописан в  ONCLICK='if(checkpatternagain())with(document.forms.formInput){toimik.value=document.forms.formSubmit.toimik.value;salastada.value=(document.forms.formSubmit.salastada.checked ? 1 : 0);operation.value="search";target="_self";submit();}'

Это сообщение отредактировал(а) tigerkvv - 28.7.2010, 13:00
PM MAIL   Вверх
chaos
Дата 28.7.2010, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


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

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



tigerkvv, а обязательно яву использовать?
я для таких целей исползую perl - все очень просто и приятно
PM WWW   Вверх
tigerkvv
Дата 28.7.2010, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



chaos,
Наше ПО - это большой комплекс написанный и развивающийся сейчас на JAVA. Хотелось бы все делать с одного рабочего места, сейчас это приемная. Девушка заполняет целый день какие-то данные, прога должна вечером отправлять, выдавать ошибки если что. Очень неудобно и некрасиво если для этого прийдется запускать что-то другое, потом эти ошибки исправлять у себя в базе (своим клиентом), потом опять другим пытаться отправить второй раз )))) Геморой.
Надо все красиво и из одного окошка. Разве что есть красивый способ работать с перл из Явы?

Думаю должен быть простой способ нажать кнопку из Явы. Типа получаем имя формы.объкт.submit )
Но я такого не знаю, может кто поможет. Перерыл уже много форумов и наших и буржуйских, прямого ответа не нашел (
PM MAIL   Вверх
LSD
Дата 28.7.2010, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Вопрос такой: а как вы вообще получаете этот 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   Вверх
tigerkvv
Дата 28.7.2010, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



LSD,
Сначала выполняется соединение , потом:
Код

                 String host = "https://misp.digilugu.ee/x/tto/index.php";
                 String encodedData = getSickLeave() + URLEncoder.encode("Http POST", "UTF-8");
                 HttpURLConnection connection = (HttpURLConnection) new URL(host).openConnection();
                    connection.setRequestMethod("POST");
                    connection.setRequestProperty( "Content-Type", "multipart/form-data");
                    connection.setRequestProperty( "Content-Length", String.valueOf(encodedData.length()));

                    connection.setDoOutput(true);
                    OutputStream outputStream = connection.getOutputStream();
                    try {
                        outputStream.write(encodedData.getBytes());
                    } finally{
                        outputStream.close();
                    }

                    BufferedReader in=null;
                    try {
                     in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
                        String line;
                        while ((line = in.readLine()) != null) {
                         tpAnswer.setText(tpAnswer.getText()+line+"\n");//JTextPane tpAnswer - потом использую для анализа ответов об ошибках
                        }
                    } finally {
                        if(in != null) in.close();
                    }


до анализа ошибок не доходит, если скопировать содержимое tpAnswer и просмотреть вручную или броузером, то видно страницу с заполненными параметрами и кнопочкой в конце.
Если зайти на страницу броузером вручную то эта же, но пустая форма с кнопочкой (во второй форме) такие же. (см. первый пост)
PM MAIL   Вверх
Uvarov
Дата 29.7.2010, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 29.7.2010
Где: Krasnodar, Russia

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



"... вторая кнопку без submit ..." - скорее всего ajax.

".. но функции checkpatternagain нигде в коде нет и что она делает конкретно - загадка ..." - Внимательно просмотрите все подключаемые *.js файлы. Если не нашли - плохо искали =)
используйте FireBug(дополнение бр FireFox) для разбора post\get запросов, ajax тоже виден.
или адресс сервера в студию, по возможности разберусь.

В любом случае нажатие на кнопку программно - не логично. На много легче пост-методом передать php все данные.
2я кнопка скорее всего функция, которая передает переменные из javascript в php.

Это сообщение отредактировал(а) Uvarov - 29.7.2010, 01:51
PM MAIL ICQ   Вверх
tigerkvv
Дата 29.7.2010, 02:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Uvarov,
- так и есть, функция checkpatternagain действительно в подключаемом js
- 2я кнопка запускает checkpatternagain, которая передает дополнительные переменные из javascript в php, но я никак не смог придумать как посмотреть что именно
- жаль что вы не посоветовали FireBug  вчера )), уже выяснил это через httpWatch, два дня потерял (и еще 3 до форума) )))

Всем спасибо за советы, в который раз убеждаюсь, как начнешь кому-то объяснять что тебе надо, так и сам начинаешь понимать как это сделать )))

PS: на форуме много тем с пометкой "решенные", но без явного объяснения как решилась проблема, типа "спасибо за ссылочку - помогло".
Дабы не плодить такие темы поясню как решить подобные проблемы другим:
- многие странички кроме явных полей для отправки содержат скрытые, кроме того есть еще неявные поля, которые формируются дополнительно скриптами
- мало того что эти поля приходится искать по всем скриптам - их значения могут браться вообще за пределами странички, браться с сервера (или другого источника)
- отловить такие ситуации помогла программа httpWatch (FireBug - не пробовал), с ее помощью можно увидеть полный набор параметров и их значений передаваемых при выполнении запроса
- проанализировав эти данные можно сформировать "правильный" POST

Надеюсь понятно и не утомительно )
PM MAIL   Вверх
LSD
Дата 29.7.2010, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Если страница не содержит хитрого JS, заточенного под конкретный браузер можно не мучатся с анализом HTTP запросов а просто взять тот же Lobo Browser и в нем открыть страничку. Если же есть хитрые JS, то можно использовать JRex.


--------------------
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   Вверх
AntonSaburov
Дата 29.7.2010, 16:05 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Честно говоря все равно ен очень понимаю - почему нельзя просто проснифить, что именно отлетает как HTTP и просто сделать тоже самое.
А весь этот JS - все равно в итоге "уедет" HTTP.
PM MAIL WWW ICQ   Вверх
Temdegon
Дата 29.7.2010, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Попробуйте библиотеку HTMLUnit http://htmlunit.sourceforge.net/
Это фактически браузер без отображения. Ей делать можно все что угодно - заполнять поля, сабмитить формы, получать значения элементов. Главнй ее плюс, что она исполняет JavaScript обрабатываемой сраницы.
PM MAIL   Вверх
tigerkvv
Дата 29.7.2010, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



AntonSaburov,
httpWatch - можно сказать и есть снифер для броузеров, можно использовать конечно любой, просто этот очень удобен, заточен и показывает все про процесс обмена броузера с сервером в удобной , легко понимаемой форме.
Сразу этого не сделал, т.к. был уверен, что заполняю все правильно, не первый раз такое делаю, вот и уперся в эту вторую форму с кнопкой.
Теперь все нормально прикручиваю куки )

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

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

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


 




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


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

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