У меня есть задача сделать приложение для Android, способное получить доступ к страницам, которые должны быть зарегистрированы. У меня нет доступа к php-коду, который использует сайт. это HTML источник сайта:Как сделать приложение для Android Android?
<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 = путь это идти, если я нажимаю кнопку Login. Когда я обратился к этому 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
}
}
вы знаете, где моя ошибка?
Благодарим за помощь. Извините за мой плохой английский.
Я пробовал, и он ничего не ответил. Если я попробую его вручную в веб-браузере, он сказал, что мне нужно ввести имя пользователя и пароль. Итак, я думаю, что сайт не передает имя пользователя и пароль по параметрам URL, а через метод POST. Таким образом, вышеуказанные коды должны работать. Я думаю, мне нужен еще один аргумент, который будет передан через метод POST, но я не знаю, что. – Lowen
Да, серверный код, вероятно, отображает страницу входа в систему, когда он получает GET и пытается войти в систему, когда получает POST. Это общий шаблон – Guillaume
Я думаю, что это вызвано https, но я попытался получить доступ к https // account.google.com, и он ответил, что я не могу использовать метод POST. Или это вызвано отсутствием файлов cookie? – Lowen