Android: How to programatically login to website and retrieve data from it?

后端 未结 2 1391
南笙
南笙 2020-12-14 13:24

Ok, guys, so I\'m recently developing android app that saves user\'s ID and PASSWORD to SharedPreferences. Now, when the user starts app second time, he will be redirected d

相关标签:
2条回答
  • 2020-12-14 14:12

    For this you must send two POST requests. In the first request, you need to send login data and save cookies, when the login was successful. In the second request, you need to send saved cookies and you can get the data. Data for POST must be formatted like this: var=value&var2=value2

    In your case:

    String data = "studKnNr=login&asmKodas=password";
    

    And url for request: https://medeine.vgtu.lt/studentams/submit.jsp

    See the following code:

    String data = "studKnNr=login&asmKodas=password";
    String loginUrl = "https://medeine.vgtu.lt/studentams/submit.jsp";
    String Login = POST_req(loginUrl, data, 10000); /*last parameter is a limit of page content length*/
    
    //And after succcessful login you can send the second request:
    String pageContent = POST_req(someUrl, "", 10000);
    
    
    //Methods for sending requests and saving cookie: 
    //(this doesn't need any changes, you can just paste it in your project)
    public String POST_req(String url, String post_data, int len) {
        URL addr = null;
        try {
                addr = new URL(url);
            } catch (MalformedURLException e) {
                return "Incorrect URL";
            }
            StringBuffer data = new StringBuffer();
            HttpURLConnection conn = null;
            try {
                conn = (HttpURLConnection) addr.openConnection();
            } catch (IOException e) {
                return "Open connection error";
            }
            conn.setRequestProperty("Connection", "keep-alive");
            conn.setRequestProperty("Accept-Language", "ru,en-GB;q=0.8,en;q=0.6");
            conn.setRequestProperty("Accept-Charset", "utf-8");
            conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
            conn.setRequestProperty("Cookie", "");
            conn.setDoOutput(true);
            conn.setDoInput(true);
            //conn.setInstanceFollowRedirects(true);
            set_cookie(conn);
            
            //POST data: 
            String post_str = post_data;
            data.append(post_str);
            try {
                conn.connect();
            } catch (IOException e) {
                return "Connecting error";
            }
            DataOutputStream dataOS = null;
            try {
                dataOS = new DataOutputStream(conn.getOutputStream());
            } catch (IOException e2) {
                return "Out stream error";
            }
            try {
                ((DataOutputStream) dataOS).writeBytes(data.toString());
            } catch (IOException e) {
                return "Out stream error 1";
            }
            
            /*If redirect: */
            int status;
            try {
                status = conn.getResponseCode();
            } catch (IOException e2) {
                return "Response error";
            }
            if (status == HttpURLConnection.HTTP_MOVED_TEMP || status == HttpURLConnection.HTTP_MOVED_PERM || status == HttpURLConnection.HTTP_SEE_OTHER) {
                String new_url = conn.getHeaderField("Location");
                String cookies = conn.getHeaderField("Set-Cookie");
                URL red_url;
                try {
                    red_url = new URL(new_url);
                } catch (MalformedURLException e) {
                    return "Redirect error";
                }
                try {
                    conn = (HttpURLConnection) red_url.openConnection();
                } catch (IOException e) {
                    return "Redirect connection error";
                }
                //conn.setRequestProperty("Content-type", "text/html");
                conn.setRequestProperty("Connection", "keep-alive");
                conn.setRequestProperty("Accept-Language", "ru,en-GB;q=0.8,en;q=0.6");
                conn.setRequestProperty("Accept-Charset", "utf-8");
                conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
                conn.setRequestProperty("Cookie", cookies);     
                conn.setDoOutput(true);
                conn.setDoInput(true);
                //conn.setInstanceFollowRedirects(true);
            }
            
            java.io.InputStream in = null;
            try {
                in = (java.io.InputStream) conn.getInputStream();
            } catch (IOException e) {
                return "In stream error";
            }
            InputStreamReader reader = null;
            try {
                reader = new InputStreamReader(in, "UTF-8");
            } catch (UnsupportedEncodingException e) {
                return "In stream error";
            }
            char[] buf = new char[len];
            try {
                reader.read(buf);
            } catch (IOException e) {
                return "In stream error";
            }
            get_cookie(conn);
            
            return (new String(buf));
        }
        public void get_cookie(HttpURLConnection conn) {
            SharedPreferences sh_pref_cookie = getSharedPreferences("cookies", Context.MODE_PRIVATE);
            String cook_new;
            String COOKIES_HEADER;
            if (conn.getHeaderField("Set-Cookie") != null) {
                COOKIES_HEADER = "Set-Cookie";
            }
            else {
                COOKIES_HEADER = "Cookie";
            }
            cook_new = conn.getHeaderField(COOKIES_HEADER);
            if (cook_new.indexOf("sid", 0) >= 0) {
                SharedPreferences.Editor editor = sh_pref_cookie.edit();
                editor.putString("Cookie", cook_new);
                editor.commit();
            }
        }
        public void set_cookie(HttpURLConnection conn) {
            SharedPreferences sh_pref_cookie = getSharedPreferences("cookies", Context.MODE_PRIVATE);
            String COOKIES_HEADER = "Cookie";
            String cook = sh_pref_cookie.getString(COOKIES_HEADER, "no_cookie");
            if (!cook.equals("no_cookie")) {
                conn.setRequestProperty(COOKIES_HEADER, cook);
            }
        }
    

    Of course you must send requests in async thread.

    Hope it's helpful. And excuse me for my bad english:)

    0 讨论(0)
  • 2020-12-14 14:13

    if you want to login with the you application in java or in android then you need to try with HTTPPOST

    example code:

    public class HttpPostExample extends Activity {
    
          TextView content;
          EditText fname, email, login, pass;
          String Name, Email, Login, Pass;
    
          /** Called when the activity is first created. */
          @Override
          public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_http_post_example);
    
              content    =   (TextView)findViewById( R.id.content );
              fname      =   (EditText)findViewById(R.id.name);
              email      =   (EditText)findViewById(R.id.email);
              login      =    (EditText)findViewById(R.id.loginname);
              pass       =   (EditText)findViewById(R.id.password);
    
    
              Button saveme=(Button)findViewById(R.id.save);
    
              saveme.setOnClickListener(new Button.OnClickListener(){
    
                  public void onClick(View v)
                  {
                      try{
    
                               // CALL GetText method to make post method call
                              GetText();
                       }
                      catch(Exception ex)
                       {
                          content.setText(" url exeption! " );
                       }
                  }
              }); 
          }
    
      // Create GetText Metod
    public  void  GetText()  throws  UnsupportedEncodingException
          {
              // Get user defined values
              Name = fname.getText().toString();
              Email   = email.getText().toString();
              Login   = login.getText().toString();
              Pass   = pass.getText().toString();
    
               // Create data variable for sent values to server 
    
                String data = URLEncoder.encode("name", "UTF-8")
                             + "=" + URLEncoder.encode(Name, "UTF-8");
    
                data += "&" + URLEncoder.encode("email", "UTF-8") + "="
                            + URLEncoder.encode(Email, "UTF-8");
    
                data += "&" + URLEncoder.encode("user", "UTF-8")
                            + "=" + URLEncoder.encode(Login, "UTF-8");
    
                data += "&" + URLEncoder.encode("pass", "UTF-8")
                            + "=" + URLEncoder.encode(Pass, "UTF-8");
    
                String text = "";
                BufferedReader reader=null;
    
                // Send data
              try
              {
    
                  // Defined URL  where to send data
                  URL url = new URL("http://androidexample.com/media/webservice/httppost.php");
    
               // Send POST data request
    
                URLConnection conn = url.openConnection();
                conn.setDoOutput(true);
                OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
                wr.write( data );
                wr.flush();
    
                // Get the server response
    
              reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
              StringBuilder sb = new StringBuilder();
              String line = null;
    
              // Read Server Response
              while((line = reader.readLine()) != null)
                  {
                         // Append server response in string
                         sb.append(line + "\n");
                  }
    
    
                  text = sb.toString();
              }
              catch(Exception ex)
              {
    
              }
              finally
              {
                  try
                  {
    
                      reader.close();
                  }
    
                  catch(Exception ex) {}
              }
    
              // Show response on activity
              content.setText( text  );
    
          }
    
      }
    

    i am getting this source from this url in this url you get all thing related your query.

    or If you want to connect to the *FTP Login * then you can follow bellow code

    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.SocketException;
    
    import org.apache.commons.io.IOUtils;
    import org.apache.commons.net.ftp.FTP;
    import org.apache.commons.net.ftp.FTPClient;
    
    public class Ftpdemo {  
    
    
         public static void main(String args[]) {  
    
          // get an ftpClient object  
          FTPClient ftpClient = new FTPClient();  
          ftpClient.setConnectTimeout(300);
          FileInputStream inputStream = null;  
    
          try {  
           // pass directory path on server to connect  
           ftpClient.connect("ftp.mydomain.in");  
    
           // pass username and password, returned true if authentication is  
           // successful  
           boolean login = ftpClient.login("myusername", "mypassword");  
    
           if (login) {  
            System.out.println("Connection established...");  
            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
    
            ftpClient.enterLocalPassiveMode();
    
            inputStream = new FileInputStream("/home/simmant/Desktop/mypic.png");  
    
            boolean uploaded = ftpClient.storeFile("user_screens/test3.png",inputStream);
    
    
    
                  if (uploaded) {  
             System.out.println("File uploaded successfully !");  
            } else {  
             System.out.println("Error in uploading file !");  
            }  
    
            // logout the user, returned true if logout successfully  
            boolean logout = ftpClient.logout();  
            if (logout) {  
             System.out.println("Connection close...");  
            }  
           } else {  
            System.out.println("Connection fail...");  
           }  
    
          } catch (SocketException e) {  
           e.printStackTrace();  
          } catch (IOException e) {  
           e.printStackTrace();  
          } finally {  
           try {  
            ftpClient.disconnect();  
           } catch (IOException e) {  
            e.printStackTrace();  
           }  
          }  
         }
    
    
        }
    
    0 讨论(0)
提交回复
热议问题