У меня есть задача создать приложение для 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
}
}
знаете ли вы, где моя ошибка?
Спасибо за вашу помощь.Извините за мой плохой английский.