Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Работа с сетью > onclick


Автор: Likurgius 29.10.2006, 17:30
Ув. Участники.....снова столкнулся с проблемой.....Передаю данные методом пост, вот так:
Код

 void dataSending() {
         try {
            // Construct data
            String data = URLEncoder.encode("login", "UTF-8") + "=" + URLEncoder.encode("asdfgh", "UTF-8");

            // Send data
            URL url = new URL("http://www.blbla.com/information/receiving");
            URLConnection conn = url.openConnection();
            conn.setDoOutput(true);
            OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
            FileWriter fw = new FileWriter("C:/webpage.html");
            wr.write(data);
            wr.flush();

            // Get the response
            BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = rd.readLine()) != null) {
                fw.write(line);
            }
            wr.close();
            rd.close();
            fw.flush();
            fw.close();
        } catch (Exception e) {
            System.err.println(e);
        }
    }


Все пересылвается, а главное, принимается правильный ответ сервера, если страница построена примерно так: 
Код

<form action="/information/receiving" method="post">
введите информацию!<br />
<input type="login" name="login" maxlength="25">
<input type="submit" value=">>">
</form>


Но вот проблема, если сделана немножечко по-другому:
Код

<form action="/information/receiving" method="POST" name="f" class="my">
    <p><br>введите информацию.<br></p>
    <input type=hidden name=url value='/information/receiving'>
    <p><input id="log" type="login" name="log" value="" size="50">&nbsp;&nbsp;<input type="submit" onclick="return check_log();" value="войти" class="button"></p>
</form>

То возникает проблема.....ибо данные отосланы, но как видно тут присутствует такая функция как onclick......то есть тут обязательно надо нажать на кнопку....
что с ней делать?есть ли какой-нибудь способ программно "нажать на кнопку"?
насколько я понимаю, в первом случае этого делать не обязательно(ведь работает же).
Буду благодарен за помощь.

Автор: kkorsakoff 29.10.2006, 20:28
Приведи код javascript функции check_log().
Скорее всего в ней проверяются значения/устанавливаются hidden переменные.
Над выяснить логику этой функции и программно эмулировать ее.
И "кликать" будет необязательноsmile

Автор: Likurgius 29.10.2006, 21:21
Боюсь, это невозможно smile 
Что она делает, я и так могу сказать: она проверяет правильность того "логина", который переслал я, с тем, который хранится в базе данных.
В первом случае это делается тоже, только там нету этого злополучного onclick.....
Поэтому, логику этой функции вряд ли можно программно эмулировать smile

а "кликать" программно не удается?

Автор: Sardar 30.10.2006, 18:42
Цитата(Likurgius @  29.10.2006,  20:21 Найти цитируемый пост)
а "кликать" программно не удается?

А при чём тут "клики" вообще?

Первая форма отсылает login=..., вторая url=/information/receiving и log=..., т.е. совсем другие имена параметров. Также вижу нормального HTTP запроса ты не делаешь. Возможно во втором случае ты пытаешься обратиться к настоящему сервису, а не к собственному эмулятору, тот требует валидный HTTP запрос (POST /information/receiving HTTP/1.1\r\nHost:www.blbla.com....)

Если не поможет, то JS во второй форме создаёт hidden поля или приписывает GET параметры в action, тебе потребуеться повторить.


P.S. и зачем для этого Java пользовать? smile

Автор: Likurgius 31.10.2006, 15:19
То, что разные параметры - я понимаю.....и делаю так, как нужно...попробую сделать через Ява нормальный хттп запрос...

П.С а если таких страниц скажем 25, то лично мне влом каждый раз заходить и заполнять поля.

Автор: kkorsakoff 31.10.2006, 17:26
Я бы забил на все эти javascript'ы и посмотрел бы при помощи любого анализатора протоколов (в обиходе сниффер) что и как передается, и программно эмулировал бы все запросы с нужной точностью (я имею ввиду насколько сервер требователен к таким заголовкам, как User-Agent, Referer, Accept и пр...). Так получится быстрее и надежнее, чем разбираться в html и javascript.

Автор: Sardar 31.10.2006, 18:23
Цитата(kkorsakoff @  31.10.2006,  16:26 Найти цитируемый пост)
Так получится быстрее и надежнее

На счёт надёжней не уверен, могут быть ньюансы.
Проще всего если ты даш линку на страницу с формой, мы посмотрим скрипты и точно решим что/как отсылать.

Цитата(Likurgius @  31.10.2006,  14:19 Найти цитируемый пост)
П.С а если таких страниц скажем 25, то лично мне влом каждый раз заходить и заполнять поля.

В смысле почему на Java, когда на питоне или PHP-CLI (не надо говорить фи smile ) дело 10 минут от силы. Естественно масса либ простых готовых если совсем с HTTP разбираться не хочеться.

Автор: Likurgius 1.11.2006, 02:17
Спасибо всем за помощь smile разобрался.....взял httpWatch и начал смотреть...нек-рые серверы действительно оказались требовательны кое к чему...

Сардар, так уж получилось, что Php я не владею smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)