Android - Как программно войти на сайт из формы - PullRequest
0 голосов
/ 12 февраля 2012

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

Ответы [ 4 ]

2 голосов
/ 12 февраля 2012

Прежде всего, вы должны проверить, есть ли на сайте API.

Если у них нет API,

  1. В Firebug (в Firefox) или РазработчикИнструменты (в Chrome), перейдите на вкладку «Сеть» и посмотрите, что сделано POST.
  2. Теперь, когда вы знаете, что отправлено и по какому URL, вы должны сделать это с помощью Java.HTTP-запросы POST / GET в Java, вам также нужно будет обрабатывать cookie-файлы (которые ваш браузер делает автоматически).Для этого вам нужно нечто, называемое CookieJar .Вы можете использовать это без использования cookiejar тоже, как объяснено здесь , но это громоздко.

Итак, прочитайте учебник здесь и начинайте .

2 голосов
/ 12 февраля 2012

Если веб-сайт использует POST, что является наиболее вероятным случаем, вы можете просто использовать UrlEncodedFormEntity и HttpClient , чтобы сделать это

HttpParams params = new BasicHttpParams();
HttpClient client = new DefaultHttpClient(params);
HttpPost post = new HttpPost("www.thewebsiteyouwanttosubmitto.com/post.php");
post.setEntity(new UrlEncodedFormEntity());
client.execute(post, new ResponseHandler(){});
2 голосов
/ 12 февраля 2012

Вы должны использовать веб-представление для отображения на веб-странице.Посмотрите официальный пример из Google: http://developer.android.com/resources/tutorials/views/hello-webview.html

Чтобы заполнить правильные поля, проверьте ответ: Заполните поля в веб-просмотре автоматически

1 голос
/ 28 июля 2014

Используйте Bookmarklets , прочитайте исходный код страницы входа в систему и выясните, какие переменные используются для фактического хранения переменных, например, если «id» для имени пользователя было «userName» и « имя 'пароль был' pwd 'вы можете получить к ним доступ, используя

document.getElementById('userName').value

и

document.getElementsByName(\"pwd\")[0].value

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

document.standardPass.uName.value

Это некоторые части веб-страницы, для которых использовались вышеуказанные коды,

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
<form name="standardPass" onsubmit="return(processButn());" action="auth.cgi" method="POST" target="authTgtFrm">

    <div id="login_box" align="left">
        <div class="vgap85"></div>
        <div id="error_box" style="visibility:hidden;">
            <div id="error_text">
            </div>
        </div>
        <div id="admin_reauth_text" style="visibility:hidden;">
            Please enter your password to begin management:
        </div>
        <div id="username_line">
            <div class="fieldName">
                Username:
            </div>
            <div class="fieldValue">
                <input type="text" id="userName" name="userName" value="" maxlength="32" autocomplete="off" style="width: 180px;">
            </div>
        </div>
        <div class="vgap8"></div>
        <div id="password_line">
            <div class="fieldName">
                Password:
            </div>
            <div class="fieldValue">
                <input type="password" name="pwd" value="" maxlength="63" autocomplete="off" style="width: 180px;">
            </div>
        </div>
        <div class="vgap8"></div>
        <div id="language_line">
            <div class="fieldName">
                Language:
            </div>
            <div class="fieldValue">
                <select name="select2">
                    <option>English</option>
                </select>
            </div>
        </div>
        <div class="vgap15"></div>
        <div id="button_line">
            <div class="fieldName">
                &nbsp;
            </div>
            <div class="fieldValue">
                <input type="submit" name="Submit" value="Login" class="button" >
            </div>
        </div>
        <div class="vgap8"></div>
        <div id="sslvpn_enabled" style="visibility:hidden;">
            <div class="fieldName">
                &nbsp;
            </div>
            <div class="fieldValue">
                Click <a href="sslvpn" onClick="top.location.href='sslvpn'";>here</a> for sslvpn login
            </div>
        </div>
    </div>

    <input type="hidden" name="uName">
    <input type="hidden" name="pass">
    <input type="hidden" name="digest">
</form>
<noscript>
    <center>
        <font color="#FFFFFF"><font size="+1">Please turn on JavaScript to login.</font></font>
    </center>
</noscript>

Теперь в Android используйте webview, чтобы загрузить страницу аутентификации, а затем загрузите ваш букмарклет в вашем webview. Протестируйте ваш букмарклет на вашем компьютере, прежде чем пытаться в веб-просмотре. Убедитесь, что переменные доступны на этом веб-сайте с помощью консоли браузера (оригинальный веб-сайт аутентификации может быть другим ( Frames

...