Autore Topic: [Login+Cookie multiplo] come effettuare login e prendere 2cookie separati  (Letto 1097 volte)

Offline eni992

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: 0
    • Mostra profilo
Salve, sono nuovo alla programmazione android, ma ho buone se non ottime basi di java... la questione è questa, devo loggarmi ad un sito web con richiesta post...e fin qui tutto ok... la pagina mi da in echo solo 1 se sono loggato e una "pagina bianca" se non lo sono... (in futuro mi darà un json con dei dati che mi servono per la app)
non posso cambiarla io ma devo attenermi a specifiche che mi hanno indicato...

il problema è questo, devo prendere un cookie diciamo, "separato in due parti" , che sono
mbu: Username.
mnp: password

ora, il login funziona bene...ma non so come prendere il cookie nonostante io abbia cercato in lungo e in largo su questo forum e altri...

se magari mi indicate come fare a prendere i due cookie e come fare poi per inviare le richieste post con il cookie al server ve ne saro infinitamente grato  :-X

ad ogni modo...il codice della classe per il login è questo:

Codice (Java): [Seleziona]
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.math.BigInteger;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.webkit.CookieManager;
import android.widget.TextView;

import com.example.mbsocialapp.Eccezioni.LoginErratoException;
import com.google.gson.Gson;


public class Login extends Thread{
               
       
        public Login(String user,String pwd,String urlD) throws IOException, LoginErratoException{
                super("ThreadLogin");
                u=user;
                p=pwd;
                url=urlD;
        }
       
        @Override
        public void run() {

                 //mi loggo, la pass cifrata per ora no
                password=this.codifica(p);
               
                //login=urlD+"?m="+user+"&p="+password+"&r";
               
                login=url+"?m="+u+"&p="+p+"&r";
               
                InputStream is = null;
            StringBuilder sb=null;
            System.setProperty("http.keepAlive", "false");
           
                ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        nameValuePairs.add(new BasicNameValuePair("m", u));
        nameValuePairs.add(new BasicNameValuePair("p", p));
        nameValuePairs.add(new BasicNameValuePair("r", ""));
        try
        {
               
         HttpClient httpclient = new DefaultHttpClient();
         HttpPost httppost = new HttpPost(url);
         
         httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
         HttpResponse response = httpclient.execute(httppost);
         HttpEntity entity = response.getEntity();
         //prendo la risposta html o altro
         is = entity.getContent();
        }
        catch(Exception e)
        {
                Log.e("log_tag","Error in http connection"+e.toString());
        }  
        try{
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
             sb = new StringBuilder();
             sb.append(reader.readLine());

             String line;
             while ((line = reader.readLine()) != null) {
                            sb.append(line);
              }
              is.close();
             
              flag= sb.toString();

             
        }catch(Exception e){
                e.printStackTrace();
        }
       
               
        }

        public String getIdl(){
                return id;
        }

//controllo se la risposta della pagina è quella che mi aspetto
        public void isLogged() throws LoginErratoException{
                if(flag==null || !flag.equals("1")){
                       
                        throw new LoginErratoException();
                }
                id=flag;
        }
       
        private String codifica(String plaintext){
               
                MessageDigest m;
                String hashtext = null;
                try {
                       
                        m = MessageDigest.getInstance("MD5");
                        m.reset();
                        m.update(plaintext.getBytes());
                        byte[] digest = m.digest();
                        BigInteger bigInt = new BigInteger(1,digest);
                        hashtext = bigInt.toString(16);
                        // Now we need to zero pad it if you actually want the full 32 chars.
                        while(hashtext.length() < 32 ){
                          hashtext = "0"+hashtext;
                        }
                       
                       
                } catch (NoSuchAlgorithmException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
               
                return hashtext;               
         }

    private String password;
    private String login,id,flag="0",url;
    public static String u,p;
    private HttpURLConnection urlConnection;
    private static String cookie;

}


da precisare:

la pagina a cui mi loggo è uno script creato apposta solo per far loggare la app...non ha html ne altro...semplicemente mi da tramite un'echo 1 se ho loggato correttamente e una pagina totalmente vuota se non l'ho fatto...è questo che mi preoccupa... non avendo html ma solo quell'1 non so proprio come prendere i due cookie :/
« Ultima modifica: 11 Gennaio 2013, 03:30:35 CET da eni992 »

Offline eni992

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: 0
    • Mostra profilo
Re:[Login+Cookie multiplo] come effettuare login e prendere 2cookie separati
« Risposta #1 il: 18 Gennaio 2013, 00:39:22 CET »
0
up

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:[Login+Cookie multiplo] come effettuare login e prendere 2cookie separati
« Risposta #2 il: 18 Gennaio 2013, 09:30:13 CET »
0
2 cose:

1- formatta il codice prima di postarlo, altrimenti è abbastanza illeggibile
2- non si capisce mica cosa vuoi fare... se il login ti va già, che cookie ti servono? devi INVIARE i cookie o ottenerli dalla risposta del server?
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline eni992

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: 0
    • Mostra profilo
Re:[Login+Cookie multiplo] come effettuare login e prendere 2cookie separati
« Risposta #3 il: 18 Gennaio 2013, 16:09:19 CET »
0
2 cose:

1- formatta il codice prima di postarlo, altrimenti è abbastanza illeggibile
2- non si capisce mica cosa vuoi fare... se il login ti va già, che cookie ti servono? devi INVIARE i cookie o ottenerli dalla risposta del server?

allora, mi devo loggare ad una pagina php tramite post...e fin qui ok...siccome la pagina è totalmente vuota (è una pagina fatta apposta per far loggare solo la app) devo prendere quei due cookie... come risposta mi da un json con dei dati per accedere alla chat...nulla di piu...quindi ricevo o null o semplicemente il json...
e appunto dovrei prendere i due cookie...lui dice tramite una richiesta di get di due variabili DD:

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:[Login+Cookie multiplo] come effettuare login e prendere 2cookie separati
« Risposta #4 il: 18 Gennaio 2013, 16:43:27 CET »
0
allora, il json starà nel response body, i cookie stanno nel response header di solito.
Basta che cerchi "HTTPResponse java getCookie" e trovi mille modi per ottenerli :D
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline eni992

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: 0
    • Mostra profilo
Re:[Login+Cookie multiplo] come effettuare login e prendere 2cookie separati
« Risposta #5 il: 20 Gennaio 2013, 13:10:25 CET »
0
allora, il json starà nel response body, i cookie stanno nel response header di solito.
Basta che cerchi "HTTPResponse java getCookie" e trovi mille modi per ottenerli :D

si a questo ci avevo pensato xD
ma non va D:
mi da un qualcosa che sembra si un cookie...ma ho provato a farlo vedere e mi ha detto che ho preso solo l'header della pagina :/
anche se poi piazzandolo traite il getcookie store nel nuovo default httpclient sembra funzionare..cioè mi tiene aperta la sessione :/
e la cosa mi sa di parecchio strana T_T