Просмотр полной версии : Помогите пожалуста с Java SE
-Girt@b_
23.02.2010, 11:34
Пишу программу для изменения пароля от учетной записи 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="6569E408CBECB37FC2FE44A99719A0BE8AA9C1067A59D325DF 85095EE04C981F">
<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()"> Запомнить меня</span>
<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,widt h=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
<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", "9BCB804B320E26F8D19B640A8A70950B52043FB82B44DF2CE5 CDF3E2D1284D9D"});
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
в одном коннекте и не получится. для каждого запроса свой коннект. и почему http а не https. И судя по тому что ты привел у тебя шлется только пост... а icq_ln ты руками вписываешь, а не считываешь со страницы.
Я помоему написал что код считывания не вставлял ибо при двойном коннекте значения совершенно разные получаются.
-Girt@b_
23.02.2010, 20:31
Как я могу предположить тут единственное решение - открыть коннект, пословно про сканировать содержимое исходного текста страницы, поиском найти данное значение, сохранить его в переменную и тут же передать пост запросом...
Может у кого то др вариант есть?
SpiderWEB
23.02.2010, 20:56
блин я в 7 посте тебе это и написал. Тут других вариантов нет. Как ты в браузере сначала заходишь на страницу, потом заполняешь поля форм и отправляешь, так же и в программе. И добавь еще заголовок User-Agent, браузер какой-нибуть. А то по умолчанию ява туда свою версию пишет и может сервак фильтрует их.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot