Как сделать приложение для входа в Android? - PullRequest
0 голосов
/ 15 декабря 2011

У меня есть задача создать приложение для Android, которое будет иметь доступ к страницам, на которые необходимо войти. У меня нет доступа к php-коду, который использует сайт.это исходный HTML-код сайта:

<center>
    <div id="loginWrapper">
        <div id="loginBox">
            <div id="loginBox-head"></div>
            <div id="loginBox-title">
                <h1></h1>
            </div>
            <div id="loginBox-body">
                <form id="form-login" action="https://xxxxx.xxxxxx.xxx/index.php?pModule=bG9naW4=&pSub=bG9naW4=&pAct=cHJvY2Nlc3M=" method="post" autocomplete="off">
                    <label for="aid_username">Username</label>
                    <input type="text" id="username" name="username" value="" onBlur="clearPasswordField();" />
                    <label for="aid_password">Password</label>
                    <input type="password" id="password" name="password" value="" />
                    <label> </label>
                    <input type="submit" value="Login" />
                    <hr />
                </form>
            </div>
            <div id="loginBox-foot"></div>
        </div>
    </div>
</center>

Я вижу, что https://xxxxx.xxxxxx.xxx/index.php?pMod ... JvY2Nlc3M = так и будет, если я нажму кнопку «Вход».Когда я получил доступ к этому URL, он ответил, что мне нужно ввести имя пользователя и пароль.Я попытался передать имя пользователя и пароль на URL, так что это было бы так: https://xxxxx.xxxxxx.xxx/index.php?pMod ... Fzc3dvcmQ =, и он все еще ответил, что мне нужно ввести его.Итак, я знаю, что он передает имя пользователя и пароль по параметру сокета.Я попытался использовать Firebug (дополнения Firefox) и войти в него вручную, и вот результат:

POST index.php?pModule=bG9naW4=&pSub=bG9naW4=&pAct=cHJvY2Nlc3M=
Params
-----------
pAct   cHJvY2Nlc3M=
pModule   bG9naW4=
pSub   bG9naW4=

Headers
-------------
Response Headers
Server   nginx/0.7.64
Date   Wed, 14 Dec 2011 19:56:32 GMT
Content-Type   text/html
Transfer-Encoding   chunked
Connection   keep-alive
X-Powered-By   PHP/4.4.8
Expires   Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control   no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma   no-cache
Location   https://xxxxx.xxxxxx.xxx/index.php?pModule=aG9tZQ==&pSub=aG9tZQ==&pAct=dmlldw==
Content-Encoding   gzip
Vary   Accept-Encoding

Request Headers
Host   xxxxx.xxxxxx.xxx
User-Agent   Mozilla/5.0 (X11; Linux i686; rv:8.0.1) Gecko/20100101 Firefox/8.0.1
Accept   text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language   en-us,en;q=0.5
Accept-Encoding   gzip, deflate
Accept-Charset   ISO-8859-1,utf-8;q=0.7,*;q=0.7
DNT   1
Connection   keep-alive
Referer   https://xxxxx.xxxxxx.xxx/
Cookie   PHPSESSID=ecf5337e2f08bf48537da099b90b8a3f

Post
--------
Parameters
password xxxxxx
username xxxxxx

source
Content-Type: application/x-www-form-urlencoded
Content-Length: 31
username=xxxxxx&password=xxxxxx

Response & HTML
-----------------------------
Reload the page to get source for: https://xxxxx.xxxxxx.xxx/index.php?pModule=bG9naW4=&pSub=bG9naW4=&pAct=cHJvY2Nlc3M=

Я пробовал два разных кода, но он не удался.вот оно:

private void login1(){
    BufferedReader in = null;

    ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>(2);
    postParameters.add(new BasicNameValuePair("username", user.getText().toString()));
    postParameters.add(new BasicNameValuePair("password", pass.getText().toString()));

    try {
        HttpClient client = new DefaultHttpClient();            
        HttpPost request = new HttpPost("https://xxxxx.xxxxxx.xxx/index.php?pModule=bG9naW4=&pSub=bG9naW4=&pAct=cHJvY2Nlc3M=");
        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(postParameters);
        request.setEntity(entity);

        HttpResponse response = client.execute(request);
        in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

        StringBuilder buffer = new StringBuilder();
        String line = "";
        String nl = System.getProperty("line.separator");
        while ((line = in.readLine()) != null) {
            buffer.append(line + nl);
        }
        in.close();

        TextView txt = (TextView) findViewById(R.id.textView1);
        txt.setText(buffer.toString());
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

и

privated void Login2()
{           
    HttpURLConnection connection;
    OutputStreamWriter request = null;

        URL url = null;          
        String parameters = "username=" + user.getText().toString() + "&password=" + pass.getText().toString();   

        try
        {
            url = new URL("https://xxxxx.xxxxxx.xxx/index.php?pModule=bG9naW4=&pSub=bG9naW4=&pAct=cHJvY2Nlc3M=");
            connection = (HttpURLConnection) url.openConnection();
            connection.setDoOutput(true);
            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            connection.addRequestProperty("Content-Length", Integer.toString(parameters.length()));
            connection.setRequestMethod("POST");    

            request = new OutputStreamWriter(connection.getOutputStream());
            request.write(parameters);
            request.flush();
            request.close();            
            String line = "";               
            InputStreamReader isr = new InputStreamReader(connection.getInputStream());
            BufferedReader reader = new BufferedReader(isr);
            StringBuilder sb = new StringBuilder();
            while ((line = reader.readLine()) != null)
            {
                sb.append(line + "\n");
            }           
            TextView txt = (TextView) findViewById(R.id.textView1);
            txt.setText(sb.toString());        
            isr.close();
            reader.close();

        }
        catch(IOException e)
        {
            // Error
        }
}

знаете ли вы, где моя ошибка?

Спасибо за вашу помощь.Извините за мой плохой английский.

1 Ответ

0 голосов
/ 15 декабря 2011

Попробуйте отправить запрос как GET, в зависимости от того, как закодирован сервер, он может работать:

https://xxxxx.xxxxxx.xxx/index.php?pModule=bG9naW4=&username=USERNAME&password=PASSWORD&pSub=bG9naW4=&pAct=cHJvY2Nlc3M=

Замените USERNAME и PASSWORD теми учетными данными, с которыми вы хотите войти.

...