2011-12-15 4 views
0

У меня есть задача сделать приложение для 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 
     } 
} 

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

Благодарим за помощь. Извините за мой плохой английский.

ответ

0

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

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

Заменить USERNAME и PASSWORD с тем, что полномочия вы хотите войти в систему с.

+0

Я пробовал, и он ничего не ответил. Если я попробую его вручную в веб-браузере, он сказал, что мне нужно ввести имя пользователя и пароль. Итак, я думаю, что сайт не передает имя пользователя и пароль по параметрам URL, а через метод POST. Таким образом, вышеуказанные коды должны работать. Я думаю, мне нужен еще один аргумент, который будет передан через метод POST, но я не знаю, что. – Lowen

+0

Да, серверный код, вероятно, отображает страницу входа в систему, когда он получает GET и пытается войти в систему, когда получает POST. Это общий шаблон – Guillaume

+0

Я думаю, что это вызвано https, но я попытался получить доступ к https // account.google.com, и он ответил, что я не могу использовать метод POST. Или это вызвано отсутствием файлов cookie? – Lowen

Смежные вопросы