2014-01-18 250 views
0

我正在學習如何登錄網站,但是我仍然無法成功完成。Android:如何登錄網站

它似乎沒有成功登錄,因爲返回的html內容仍然是登錄頁面,而不是成功的登錄頁面。

我選擇了網站來練習,以下是我的核心代碼。非常感謝。

public class TestAyncTask extends AsyncTask<Void, Void, Void> { 

    private final String url = "http://dinbendon.net/do"; 
    private DefaultHttpClient client; 
    private String CAPTCHA; 
    private String strResult; 

    public TestAyncTask() { 

     client = new DefaultHttpClient(); 

    } 

    @Override 
    protected Void doInBackground(Void... params) { 

     initial(url);     

     List<NameValuePair> list = new ArrayList<NameValuePair>(); 
     list.add(new BasicNameValuePair("username", "guest"));  
     list.add(new BasicNameValuePair("password", "guest")); 
     list.add(new BasicNameValuePair("result", CAPTCHA)); 

     try { 

      HttpPost httpPost = new HttpPost(url); 
      httpPost.setEntity(new UrlEncodedFormEntity(list, HTTP.UTF_8)); 
      HttpResponse httpResponse = client.execute(httpPost); 
      if (httpResponse.getStatusLine().getStatusCode() == 200) { 

       strResult = EntityUtils.toString(httpResponse.getEntity()); 

       Log.d("Test", strResult); 


      } 

      List<Cookie> cookies = client.getCookieStore().getCookies(); 
      for (int i = 0; i < cookies.size(); i++) { 
       Log.e("Test", cookies.get(i).getName() + ": " + cookies.get(i).getValue()); 
      } 

     } catch (Exception e) { 

      Log.e("Test", e.toString()); 

     } 

     return null; 

    } 

    private void initial(String url) { 

     int sum = 0; 
     try { 

      HttpGet get = new HttpGet(url); 
      HttpResponse response = client.execute(get); 
      HttpEntity resEntity = response.getEntity(); 
      InputStream is = resEntity.getContent(); 
      InputStreamReader isr = new InputStreamReader(is, "utf-8"); 
      BufferedReader in = new BufferedReader(isr); 

      String line = ""; 
      while ((line = in.readLine()) != null) { 

       if (line.contains("<td style=\"width: 6em;\" class=\"alignRight\">")) { 

        int start = line.indexOf("\">") + "\">".length(); 
        int end = line.indexOf("=<", start); 
        String result = line.substring(start, end); 

        if (result.contains("加")) { 

         sum = Integer.valueOf(result.split("加")[0]) + Integer.valueOf(result.split("加")[1].split("等於")[0]); 

        } else if (result.contains("+")) { 

         sum = Integer.valueOf(result.split("\\+")[0]) + Integer.valueOf(result.split("\\+")[1]); 

        } else if (result.contains("+")) { 

         sum = Integer.valueOf(result.split("+")[0]) + Integer.valueOf(result.split("+")[1]); 

        } else { 

         Log.e("Test", "Not matched"); 

        } 

        Log.e("Test", "sum: " + sum); 

        break; 

       } 

      } 

     } catch (Exception e) { 

      Log.e("Test", e.toString()); 

     } 

     CAPTCHA = String.valueOf(sum); 

    } 

    @Override 
    protected void onPostExecute(Void result) { 

     textview.setText(strResult); 
     client.getConnectionManager().shutdown(); 

    } 

} 
+0

登錄成功...更改用戶名 - 密碼,不要用用戶名密碼登錄您的密碼 –

+0

您能登錄嗎?使用相同的代碼?或者你改變了什麼?如果您登錄成功,登錄頁面將在html內容中包含「guest」關鍵字。客人/客人是由網站提供的帳戶。 – user3209403

+0

是的,我登錄成功,我看到了客人的頁面。 –

回答

0
textview.setText(strResult); 

doInbackground是不可能的。你不能從後臺線程更新ui。

+0

謝謝,我已更新它,但登錄問題尚未解決。 – user3209403

+0

@ user3209403與登錄有關的問題是什麼? – Raghunandan

+0

它沒有成功登錄。 – user3209403