Пишу программу для изменения пароля от учетной записи 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(); По ответу параметры логина и пароля вроде бы передаются, но не чего не происходит Помогите пожалуйста мне сегодня проект этот надо отослать на проверку.
Попробуй вместо URLConnection HttpsURLConnection. У него есть метод setRequestMethod("POST"). И еще мне кажется URLEncoder ты неправильно используешь...
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> интересно каким макаром тут может получаться пароль??? и как его передать ПОСТом??
ха.... слишком мало ты смотришь. Code: <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()"> Запомнить меня</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,width=600,status=no,toolbar=no,menubar=no,location=no,resizable=no')"> </div> </div> </form> все инпуты что есть в форме нужно отправлять, а не только логин пароль.
Я видел этот код... наизусть его уже знаю. там в общем передается шесть параметров: uin_email - логин password - пароль, как он передается я хз... dest - http://www.icq.com/support/change_password/?icid=nav_pw КОНСТАНТА service - 30 КОНСТАНТА icq_ln - что сюда передовать я не много не могу понять... по началу думал КУКС, но нет... rem - 1 КОНСТАНТ если не надо запоминать данные передаю все параметры... глухо
Code: <input type="hidden" name="icq_ln" value="6569E408CBECB37FC2FE44A99719A0BE8AA9C1067A59D325DF 85095EE04C981F"> вот то что в value, то и надо передавать. А для этого сначала тебе нужно в гет запросе получить html код страницы, выдернуть оттуда это валью и слать пост запрос.
Code: 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(); } } Код функции отправки данных Code: 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(); } Не могу считать страницу изначально в одном коннекте... выбивает исключение Если два коннекта, то значения разные Код считывания не вставлял. Пробовал скрипт для подключения к КОНТАКТУ - все норм вроде...
в одном коннекте и не получится. для каждого запроса свой коннект. и почему http а не https. И судя по тому что ты привел у тебя шлется только пост... а icq_ln ты руками вписываешь, а не считываешь со страницы.
Я помоему написал что код считывания не вставлял ибо при двойном коннекте значения совершенно разные получаются.
Как я могу предположить тут единственное решение - открыть коннект, пословно про сканировать содержимое исходного текста страницы, поиском найти данное значение, сохранить его в переменную и тут же передать пост запросом... Может у кого то др вариант есть?
блин я в 7 посте тебе это и написал. Тут других вариантов нет. Как ты в браузере сначала заходишь на страницу, потом заполняешь поля форм и отправляешь, так же и в программе. И добавь еще заголовок User-Agent, браузер какой-нибуть. А то по умолчанию ява туда свою версию пишет и может сервак фильтрует их.