Войдите на форум vbulletin, используя Java - PullRequest
1 голос
/ 13 июля 2010

В рамках своей диссертации я создал «бота», который сканирует официальный форум курса «Программирование на C» и ищет часто задаваемые вопросы, чтобы опубликовать ответ.Я нахожусь на той части, что я должен смоделировать логин, чтобы иметь возможность опубликовать соответствующий ответ.Форма входа в систему выглядит следующим образом:

! - форма входа в систему - форма действия = "login.php? Do = login" метод = "post" onsubmit = "md5hash (vb_login_password, vb_login_md5password, vb_login_md5password_utf, 0)"> script type =" text / javascript "src =" clientscript / vbulletin_md5.js? v = 385 "> таблица cellpadding =" 0 "cellspacing =" 3 "border =" 0 "> tr> td class =" smallfont "style= "white-space: nowrap;"> νομα χρήστη td>

td class = "smallfont" nowrap = "nowrap"> ύυτόματη Σύνδεση / tr> tr> td class = "smallfont"> Κωδικός td> td> / tr> / table>

input type = "hidden" name = "s" value = "" /> input type = "hidden" name = "securitytoken" value = "guest" /> тип ввода= "hidden" name = "do" value = "login" /> тип ввода = "hidden" name = "vb_login_md5password" /> тип ввода = "hidden" name = "vb_login_md5password_utf" /> / form>! - / loginform ->

Я понял, что мне нужно md5 хэшировать пароль, но я не могу войти.Я использую метод post и подготавливаю контент, выполняя следующие действия:

content = "do=login&url=login.php" + "&vb_login_md5password=" + md5_pass+ "&vb_login_md5password_utf="+ md5_pass + "&s=&securitytoken=guest&vb_login_username=" + UserName + "&vb_login_password=" + PassWprd;

Затем отправляю тексты заявки следующим образом:

urlConnection = (HttpURLConnection)(new URL(targetUrl).openConnection());

        // Specifying that we intend to use this connection for input
        urlConnection.setDoInput(true);

        // Specifying that we intend to use this connection for output
        urlConnection.setDoOutput(true);

        // Specifying the method of HTTP request which is POST
        // throws ProtocolException
        urlConnection.setRequestMethod("POST");

        // Specifying the content type of our post
        urlConnection.setRequestProperty("Content-Type", POST_CONTENT_TYPE);
        urlConnection.setRequestProperty("Content-length",String.valueOf (content.length()));
       // urlConnection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)");

        // Prepare an output stream for writing data to the HTTP connection
        // throws IOException
        dataOutputStream = new DataOutputStream(urlConnection.getOutputStream());
        dataOutputStream.writeBytes(content);

Тем не менее, я не могу войти в систему.Я верю, что у меня что-то не так в форме, которую я отправляю, но я не могу найти что.Буду признателен за любую помощь, так как я должен закончить программу в течение нескольких дней.

Ответы [ 2 ]

1 голос
/ 13 июля 2010

Вместо того, чтобы пытаться подделывать HTTP-запросы вручную, я бы вместо этого предложил вам полагаться на виртуальный веб-клиент, например HtmlUnit . он позволяет вам перейти на более высокий уровень и вместо того, чтобы пытаться подделать HTTP-запрос с нужными элементами, вам «просто» нужно заполнить форму с правильными значениями.

0 голосов
/ 13 июля 2010

Я думаю, что лучше всего было бы, если бы вы сначала попытались увидеть, равен ли ваш http-запрос тому, который был создан браузером при обычном входе в систему.

Для этого вы можете установить дополнение Live HTTP Headerв Firefox (https://addons.mozilla.org/de/firefox/addon/3829/) - это позволит вам увидеть, как именно выглядит запрос на вход в браузер.

На стороне java метод toString () перезаписывается и должен отображать полный заголовок, afaik. Если нет, просто сравните строку содержимого и убедитесь, что вы установили все нужные заголовки.

...