Autore Topic: Utilizzo di servizio https tramite post e retain della sessione  (Letto 876 volte)

Offline nnever2000

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    emulatore
  • Sistema operativo:
    windows xp sp3
Utilizzo di servizio https tramite post e retain della sessione
« il: 09 Gennaio 2012, 10:04:40 CET »
0
Buon giorno a tutti,
sono un sviluppatore in erba e sto provando a consumare un servizio web https (basato du POST). In sostanza io gli mando tramite POST una serie di parametri e lui mi ritorna un output in formato json.

Googolando qua e là ho messo su il servizio, in particolare leggo i cokkie della sessione alla fine della prima chiamata e li imposto per le altre.

Tutto funziona perfettamente sul servizio in versione sola HTTP ma portando tutto sul servizio di produzione in htpps funziona tutto tranne il retain della sessione: benchè imposti il cokie prima di fare la post (con il comando evidenziato sotto) il server non lo riconosce e mi mi stacca un cokie di sessione nuovo. Ripeto questo capita solo con la versione HTTPS.

Non capisco perchè.

Questo e il mio metodo (ottenuto mettendo isieme i pezzi da vari siti):

Infinite grazie a chiunque vorrà aiutarmi.

P.S. sono dietro un proxy, in ogni caso non dovrebbe influire in quanto ho scritto un programma equivalente in linguaggio alternativo (non per android) che invece funziona regolarmente.


   
Codice (Java): [Seleziona]
protected String Post(String url_function, String data) {
                HttpURLConnection connection;
                OutputStreamWriter request = null;

                URL url = null;
                String response = null;

                try {
                        String ulr_completa = url_function;
                        url = new URL(ulr_completa);

                        // HttpURLConnection http = null;

                        if (url.getProtocol().toLowerCase().equals("https")) {
                                trustAllHosts();
                                HttpsURLConnection https = (HttpsURLConnection) url
                                                .openConnection();
                                https.setHostnameVerifier(DO_NOT_VERIFY);
                                connection = https;
                        } else {
                                connection = (HttpURLConnection) url.openConnection();
                        }

                        // connection = (HttpURLConnection) url.openConnection();
                        connection.setDoOutput(true);
                        connection.setDoInput(true);
                        connection.setRequestProperty("Content-Type",
                                        "application/x-www-form-urlencoded");
                        connection.setRequestMethod("POST");

                        // Aggiungo la sessione se esiste
                        if (cookie != null)
                        {
                                // ***************************************************************************
                                // ***************************************************************************
                                connection.setRequestProperty("Cookie", cookie);
                                // ***************************************************************************
                                // ***************************************************************************
                                connection.setRequestProperty("Set-Cookie", cookie);
                                connection.setRequestProperty("Set-Cookie2", cookie);                          
                        }

                        request = new OutputStreamWriter(connection.getOutputStream());
                        request.write(data);
                        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");
                        }
                        // Response from server after login process will be stored in
                        // response variable.
                        response = sb.toString();
                        // You can perform UI operations here
                        Toast.makeText(this, "Message: \n" + response, 0).show();
                        isr.close();
                        reader.close();

                        Toast.makeText(this, ">>>>>" + connection.getHeaderField("set-cookie"), 0).show();
                       
                        if (cookie == null) {
                                String sfield = connection.getHeaderField("set-cookie");
                                String[] fields = sfield.split(";");
                                cookie = fields[0];
                                cookie = connection.getHeaderField("set-cookie");                              
                                // cookie = GetCookieFromURL1(ulr_completa);
                                // String a;
                                // CookieManager cookieManager = CookieManager.getInstance();
                                // cookie = cookieManager.getCookie(ulr_completa);
                        }
                       
                        connection.disconnect();      

                        Toast.makeText(this, cookie, 0).show();

                } catch (IOException e) {
                        // Error
                        Toast.makeText(this, e.getMessage(), 0).show();
                }

                return response;
        }
« Ultima modifica: 13 Gennaio 2012, 16:01:07 CET da Ricky` »

Offline nnever2000

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    emulatore
  • Sistema operativo:
    windows xp sp3
Re:Utilizzo di servizio https tramite post e retain della sessione
« Risposta #1 il: 13 Gennaio 2012, 15:58:21 CET »
0
Sto veramente impazzendo.......... A I U T O

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Utilizzo di servizio https tramite post e retain della sessione
« Risposta #2 il: 13 Gennaio 2012, 16:02:51 CET »
+1
Premetto che non ho esperienza in una cosa del genere ma è solo un'idea che mi è venuta.
Hai provato a fare la medesima chiamata magari da browser ed analizzare lo scambio dei messaggi http? magari scopri qualcosa.

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:Utilizzo di servizio https tramite post e retain della sessione
« Risposta #3 il: 13 Gennaio 2012, 20:35:53 CET »
+1
sicuro che non ci sono problemi di concorrenza, tipo activity multiple o cose simili?
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 nnever2000

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    emulatore
  • Sistema operativo:
    windows xp sp3
Re:Utilizzo di servizio https tramite post e retain della sessione
« Risposta #4 il: 16 Gennaio 2012, 09:42:04 CET »
0
Ciao a tutti e grazie per le risposte.

Ho provato dal browser interno dell'android e tutto funziona come dovrebbe. Riguardo activity multiple non credo dal momento che il medesimo codice utilizzando http funziona regolarmente.

Ho scritto un programma in .net che fa la stessa cosa e funziona regolarmente, ho notato però qualcosa di diverso con la variabile di sessione che in .net è dello stesso tipo (lunghezza e contenuto) sia per http che https mentre su android quella https è leggermente diversa, più lunga e con un punto interrogativo i  mezzo.

Cookie sessione https android: ASP.NET_SessionId_.mydomain.it_%2F_wat=QVNQLk5FVF9TZXNzaW9uSWRf?QFT5vNtkWjn1Ck8H991qVaKuIY4A&
Cookie sessione https .net:       ASP.NET_SessionId=gd5zdyzmojqwxdbnakmjv5ah

Cookie sessione http sia .net che android sono di questo tipo:       ASP.NET_SessionId=gd5zdyzmojqwxdbnakmjv5ah
ASP.NET_SessionId=cpaklk45xoosms45by310kq4

Magari centra magari no..................

Comunque in rete sto vedendo che è un problema comune la maggior parte degli esempi si fermano a amantenere la sessione su http normale oppure a fare la sola posgt su https ma nessuno mette mai insieme le cose sugli esempi, e chi lo fa lo fa con indicazioni vaghe.

Continuo a cercare.

Grazie per l'aiuto

UPDATE: Ragazzi, risolto con questo!!!!

java - Trusting all certificates using HttpClient over HTTPS - Stack Overflow
« Ultima modifica: 16 Gennaio 2012, 15:30:00 CET da nnever2000 »