Разобрать исходный код HTML после входа в систему с Java - PullRequest
1 голос
/ 12 октября 2011

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

Веб-сайт https://giffgaff.com/mobile/login

А ниже приведена вырезанная версия формы с этой страницы (HTML):

<form action="/mobile/login" method="post">
    <input type="hidden" name="login_security_token" value="b22155c7259f402f8e005a771c460670">    
    <input type="hidden" name="redirect" value="/mobile">    
    <input type="hidden" name="p_next_page" value="">    


    <input name="nickname" maxlength="25" type="text" value="" />            
    <input name="password" type="password" value="" />

    <button name="step" type="submit" value="Login">Login</button>
</form>

Может кто-нибудь подсказать, как мне войти на этот сайт с помощью Java, а затем проанализировать перенаправленную страницу?

До сих пор я пробовал процессы в строках:

public static void main(Context context) {
    try {
        // Construct data
        String data = URLEncoder.encode("nickname", "UTF-8") + "=" + URLEncoder.encode("testingA", "UTF-8");
        data += "&" + URLEncoder.encode("password", "UTF-8") + "=" + URLEncoder.encode("testing", "UTF-8");

        // Send data
        URL url = new URL("https://giffgaff.com/mobile/login");
        URLConnection conn = url.openConnection();
        conn.setDoOutput(true);
        OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
        wr.write(data);
        wr.flush();

        // Get the response
        BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String str = "";
        String line;
        while ((line = rd.readLine()) != null) {
            str += line;
        }

        AlertDialog alertDialog = new AlertDialog.Builder(context).create();
        alertDialog.setTitle("Output");
        alertDialog.setMessage(str);
        alertDialog.setButton("Okay", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {

            }
        });
        alertDialog.show();

        wr.close();
        rd.close();
    } catch (Exception e) {
        AlertDialog alertDialog = new AlertDialog.Builder(context).create();
        alertDialog.setTitle("ERROR");
        alertDialog.setMessage(e.toString());
        alertDialog.setButton("Okay", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {

            }
        });

        alertDialog.show();
    }
}

Но мои попытки вернуть страницу, как если бы информация для входа была неверной.

Если выХотелось бы убедиться в том, как ведет себя страница входа в систему, вот некоторые подробности тестового входа в систему: Ник (имя пользователя): testingA Пароль: testing Сайт также, похоже, зависит от файла cookie с именем "napaSessionId"

Ответы [ 2 ]

2 голосов
/ 12 октября 2011

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

Чтобы ответить на вопрос, существует множествоЕсть много причин, по которым сайт отказывает в регистрации.Чтобы сделать это успешно, вам нужно максимально приблизиться к тому, как браузер будет обрабатывать транзакцию.Чтобы сделать это, вам нужно посмотреть, что делает настоящий браузер.

https более сложен, так как многие снифферы http не могут с этим справиться, но httpwatch утверждает, что может.Проверьте транзакции HTTP и затем попытайтесь их реплицировать.

Ваш вызов url.openConnection () фактически вернет экземпляр HTTPURLConnction, приведенный к нему, и тогда вы сможете легко установить различные заголовки http,как пользователь-агент.

В заключение, вы говорите, что может потребоваться файл cookie.Ваш код не будет иметь дело с куки.Для этого вам понадобится менеджер файлов cookie, например: http://download.oracle.com/javase/tutorial/networking/cookies/index.html

0 голосов
/ 21 июня 2012

Вы можете проверить Jsoup , htmlUnit и httpUnit .Я пытаюсь сделать это прямо сейчас и сталкиваюсь со всеми видами трудностей, но я уверен, что один из этих проектов - это путь ...

Удачи, держите меня в курсе!

...