volley studio ejemplo java android post httpclient httpurlconnection

studio - post java android



Android: ¿cómo iniciar sesión programáticamente en el sitio web y recuperar datos de él? (3)

Ok, chicos, estoy desarrollando una aplicación de Android que guarda la ID del usuario y la CONTRASEÑA a SharedPreferences. Ahora, cuando el usuario inicia la aplicación por segunda vez, se le redirigirá directamente a MainActivity con algunas opciones en listView. Y ahora tengo un gran dolor de cabeza y me está volviendo loco. No puedo iniciar sesión en el sitio web y buscar los datos en mi teléfono. Intenté usar Http (s) UrlConnection, HttpClient, pero parece que no funciona para mí. Todo lo que obtengo del método POST es un código fuente de la página de inicio de sesión.

Ahora, hay una página de inicio de sesión: https://medeine.vgtu.lt/studentams/login.jsp?klb=en

y mi página de destino: https://medeine.vgtu.lt/studentams/pask_stud.jsp <- Necesito obtener datos de allí

¿Tiene alguna idea o consejos / métodos / guías / algo sobre cómo hacer eso?



si quieres iniciar sesión con tu aplicación en Java o en Android, entonces debes probar con HTTPPOST

código de ejemplo:

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 ); } }

Obtengo esta fuente de esta url en esta url. Obtienes todo lo relacionado con tu consulta.

o Si desea conectarse al * FTP Login * , puede seguir el código de abajo

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(); } } } }


Para esto debe enviar dos solicitudes POST. En la primera solicitud, debe enviar los datos de inicio de sesión y guardar las cookies, si el inicio de sesión es correcto. En la segunda solicitud, necesita enviar cookies guardadas y puede obtener los datos. Los datos para POST se deben formatear de la siguiente manera: var = value & var2 = value2

En tu caso:

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

Y url para la solicitud: https://medeine.vgtu.lt/studentams/submit.jsp

Mire el siguiente código:

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 succcess login you can send second request: String pageContent = POST_req(someUrl, "", 10000); //Methods for sending requests and saving cookie: //(this no needs for changing, can only past to you project) public String POST_req(String url, String post_data, int len) { URL addr = null; try { addr = new URL(url); } catch (MalformedURLException e) { return "Некорректный 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); } }

Por supuesto, debe enviar solicitudes en el hilo asincrónico.

Espero que sea útil. Y discúlpeme por mi mal inglés :)