Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Помогите пожалуста с Java SE (https://forum.antichat.xyz/showthread.php?t=181232)

-Girt@b_ 23.02.2010 11:34

Помогите пожалуста с Java SE
 
Пишу программу для изменения пароля от учетной записи ICQ. Проблема с коннектом на сервер... вот исходничек коннекта к учетной записи...

URL urlLogin = new URL("https://www.icq.com/karma/login_page.php");
URLConnection loginConnection = urlLogin.openConnection();
loginConnection.setDoInput(true);
loginConnection.setDoOutput(true);
logTextPane.setText(logTextPane.getText() + "Connecting to icq.com... OK\n");
PrintWriter out = new PrintWriter(loginConnection.getOutputStream());
out.print("uin_email=" + URLEncoder.encode(icqSNField.getText()) + "&password=" + URLEncoder.encode(passwordField.getText()));
out.close();
BufferedReader in = new BufferedReader(new InputStreamReader(loginConnection.getInputStream() ));
StringBuffer respponse = new StringBuffer();
String line;
while((line = in.readLine()) != null){
respponse.append(line + "\n");
}
System.out.println(respponse.toString());
in.close();

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

-Girt@b_ 23.02.2010 14:23

Блин ну неужели никто не знает как отсылать POST запросы в Java SE???

SpiderWEB 23.02.2010 14:53

Попробуй вместо URLConnection HttpsURLConnection.
У него есть метод setRequestMethod("POST").
И еще мне кажется URLEncoder ты неправильно используешь...

-Girt@b_ 23.02.2010 15:09

4-3"><input type="text" name="uin_email" value="" class="d1-4-input" onkeydown="uin_field_change()"></div>
<div class="d1-4-4"><input type="password" name="password" class="d1-4-input" maxlength="32"></div>

интересно каким макаром тут может получаться пароль??? и как его передать ПОСТом??

SpiderWEB 23.02.2010 15:15

ха.... слишком мало ты смотришь.
Код:

<form name="login" id="login_frm" action="https://www.icq.com/karma/login.php" method="post" onsubmit="return check();">
        <div class="d1-3">Чтобы продолжить, пожалуйста, войдите в систему:</div>
                <div class="d1-4">
                        <input type="hidden" name="dest" value="http://www.icq.com">
                        <input type="hidden" name="service" value="30">
                        <input type="hidden" name="icq_ln" value="6569E408CBECB37FC2FE44A99719A0BE8AA9C1067A59D325DF85095EE04C981F">
                        <div class="d1-4-1">Номер ICQ или E-mail</div>
                        <div class="d1-4-2">Пароль ICQ</div>
                        <div class="d1-4-3"><input type="text" name="uin_email" value="" class="d1-4-input" onkeydown="uin_field_change()"></div>
                        <div class="d1-4-4"><input type="password" name="password" class="d1-4-input" maxlength="32"></div>
                        <div class="d1-4-5">
                                        <div>
                                                <div class="but-3" name="next" title="Войти" onclick="submit_login();">
                                                        <img src="img/icon_l.gif" width="20" height="29" alt="">
                                                </div>
                                                <div class="but-1" name="next_btn" id="next_btn" title="Войти" onclick="submit_login();">
                                                        <div>Войти</div>
                                                </div>
                                                <div class="but-2" name="next" title="Войти">
                                                        <input type="image" src="img/corner_r.gif" width="6" height="29" alt="">
                                                </div>
                                        </div>
                                       
                                </div>
                                <div class="d1-4-6">
                                        <input type="checkbox" class="d1-4-chk" id="rem" name="rem" value="1"><span class="d1-4-rem" onclick="remember_me_check()">&nbsp;Запомнить меня</span>
                                        &nbsp;<img src="img/info.gif" title="Справка" class="d1-4-img" alt="" border="0" width="14" height="14" onclick="window.open('http://www.icq.com/legal/legal_popup_message_ru.html',null,'height=200,width=600,status=no,toolbar=no,menubar=no,location=no,resizable=no')">
                                </div>
                </div>
                </form>

все инпуты что есть в форме нужно отправлять, а не только логин пароль.

-Girt@b_ 23.02.2010 15:29

Я видел этот код... наизусть его уже знаю. там в общем передается шесть параметров:
uin_email - логин
password - пароль, как он передается я хз...
dest - http://www.icq.com/support/change_password/?icid=nav_pw КОНСТАНТА
service - 30 КОНСТАНТА
icq_ln - что сюда передовать я не много не могу понять... по началу думал КУКС, но нет...
rem - 1 КОНСТАНТ если не надо запоминать данные
передаю все параметры... глухо:(

SpiderWEB 23.02.2010 15:34

Код:

<input type="hidden" name="icq_ln" value="6569E408CBECB37FC2FE44A99719A0BE8AA9C1067A59D325DF  85095EE04C981F">
вот то что в value, то и надо передавать. А для этого сначала тебе нужно в гет запросе получить html код страницы, выдернуть оттуда это валью и слать пост запрос.

-Girt@b_ 23.02.2010 15:37

угу... ок попробую. а что касается пароля... как его передавать? точно также?

SpiderWEB 23.02.2010 15:43

да

-Girt@b_ 23.02.2010 15:47

Ну сейчас попробую переписать код... посмотрю что из этого получиться

-Girt@b_ 23.02.2010 16:50

Цитата:

Сообщение от SpiderWEB
Код:

<input type="hidden" name="icq_ln" value="6569E408CBECB37FC2FE44A99719A0BE8AA9C1067A59D325DF  85095EE04C981F">
вот то что в value, то и надо передавать. А для этого сначала тебе нужно в гет запросе получить html код страницы, выдернуть оттуда это валью и слать пост запрос.

Код:

public static void main(String[] args) {
      Start testPostRequest = new Start();
      //создаём лист параметров для запроса
      java.util.List<String[]> params = new LinkedList<String[]>();
      params.add(new String[]{"uin_email", "***"});
      params.add(new String[]{"password", "***"});
      params.add(new String[]{"dest", "http://www.icq.com/support/change_password/?icid=nav_pw"});
      params.add(new String[]{"service", "30"});
      params.add(new String[]{"icq_ln", "9BCB804B320E26F8D19B640A8A70950B52043FB82B44DF2CE5CDF3E2D1284D9D"});
      params.add(new String[]{"rem", "1"});
      //будем использовать прокси
      testPostRequest.useProxy = true;
      testPostRequest.proxyAdress = "221.238.17.245";
      testPostRequest.proxyPort = 8080;
      try {
          //отправляем запрос на страницу логина http://vkontakte.ru
          System.out.println(testPostRequest.sendPostRequest("https://www.icq.com/karma/login_page.php", params));
      } catch (IOException e) {
          e.printStackTrace();
      }
  }

Код функции отправки данных
Код:

private String sendPostRequest(String urlLocation, java.util.List parameters) throws IOException {
      StringBuffer result = new StringBuffer();
      HttpURLConnection connection = getConnection(urlLocation);
      System.out.println("Соединение с " + urlLocation + " установлено.");

      connection.setRequestMethod("POST");
      connection.setRequestProperty("Referer", urlLocation);
      connection.setRequestProperty("Cookie", "your cookies may be here");
      String data = "";
      if (parameters != null) {
          for (int i = 0; i < parameters.size(); i++) {
              String param[] = (String[]) parameters.get(i);
              if (i != 0) {
                  data = data + "&";
              }
              data = data + param[0] + "=" + URLEncoder.encode(param[1], "UTF-8");
          }

      }
      if (parameters != null && data.length() != 0) {
          connection.setRequestProperty("Content-Length", Integer.toString(data.length()));
      }
      connection.connect();

       

      if (parameters != null && data.length() != 0) {
          System.out.println("Отправка данных..");
          PrintWriter out = new PrintWriter(connection.getOutputStream());
          out.write(data);
          out.flush();
          System.out.println("Получение ответа от сервера..");
      }
      result.append("response code: ").append(connection.getResponseCode()).append("\n");
      result.append("response cookies: ").append(getResponseCookies(connection)).append("\n");
      result.append("response page source: ").append("\n");
     

      BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));
      String line;
      while ((line = rd.readLine()) != null) {
          result.append(line).append("\n");
      }
     
      connection.disconnect();
      return result.toString();
  }

Не могу считать страницу изначально в одном коннекте... выбивает исключение:( Если два коннекта, то значения разные:(
Код считывания не вставлял.

Пробовал скрипт для подключения к КОНТАКТУ - все норм вроде...

SpiderWEB 23.02.2010 17:29

в одном коннекте и не получится. для каждого запроса свой коннект. и почему http а не https. И судя по тому что ты привел у тебя шлется только пост... а icq_ln ты руками вписываешь, а не считываешь со страницы.

-Girt@b_ 23.02.2010 18:01

Цитата:

Сообщение от SpiderWEB
в одном коннекте и не получится. для каждого запроса свой коннект. и почему http а не https. И судя по тому что ты привел у тебя шлется только пост... а icq_ln ты руками вписываешь, а не считываешь со страницы.

Я помоему написал что код считывания не вставлял ибо при двойном коннекте значения совершенно разные получаются.

-Girt@b_ 23.02.2010 20:31

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

SpiderWEB 23.02.2010 20:56

блин я в 7 посте тебе это и написал. Тут других вариантов нет. Как ты в браузере сначала заходишь на страницу, потом заполняешь поля форм и отправляешь, так же и в программе. И добавь еще заголовок User-Agent, браузер какой-нибуть. А то по умолчанию ява туда свою версию пишет и может сервак фильтрует их.


Время: 03:53