Autore Topic: Problema HTTP POST  (Letto 984 volte)

Offline kenshiro86

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows XP
Problema HTTP POST
« il: 28 Dicembre 2010, 11:15:59 CET »
0
Ciao a tutti.
Per un progetto dell'università devo realizzare un'applicazione per Android che permetta l'accesso alla Mobile Banking di una nota banca. In un mio precedente topic avevo segnalato un problema per quanto riguardava la non accettazione del certificato del sito da parte dell'applicazione, problema che tuttavia ho risolto.  :-)
Adesso però mi serve nuovamente il vostro aiuto, in quanto non riesco ad inviare i dati necessari all'autenticazione!  >:(
La tecnica che ho scelto è quella dell'http POST.
Vi allego il sorgente di quanto ho fatto finora:
Codice (Java): [Seleziona]
package com.kenshiro.prova;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.HttpVersion;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import com.kenshiro.prova.FakeSocketFactory;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

import android.widget.EditText;




public class Prova extends Activity{
       
       
       
    EditText codiceUtente = null;

    Button loginButton = null;

    Button exitButton = null;


   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

       
       
        codiceUtente = (EditText)findViewById(R.id.codice_utente);

        // Dichiarazione ed assegnazione dei listener dei pulsanti
        loginButton = (Button)findViewById(R.id.bottone);

        exitButton = (Button)findViewById(R.id.esci);

        exitButton.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                        exitButtonClick();
                }
        });

        loginButton.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                        CharSequence inputData = codiceUtente.getText();
                        String utente = inputData.toString();
                        HttpClient httpclient = getClient();
                                HttpPost httppost = new HttpPost("https://ib.mps.it/web/mbts/home");   //sito su cui fare il login
                       
               
                    // Add your data
                    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                    nameValuePairs.add(new BasicNameValuePair("loginStep","0"));
                    nameValuePairs.add(new BasicNameValuePair("userCode",utente));
                   
                    try {
                                                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                                        } catch (UnsupportedEncodingException e1) {
                                                // TODO Auto-generated catch block
                                                e1.printStackTrace();
                                        }

                    // Execute HTTP Post Request
                    try {
                                                httpclient.execute(httppost);
                                        } catch (ClientProtocolException e) {
                                                // TODO Auto-generated catch block
                                                e.printStackTrace();
                                        } catch (IOException e) {
                                                // TODO Auto-generated catch block
                                                e.printStackTrace();
                                        }
                   
                               
                       

                                Intent intent = new Intent(Prova.this,
                                                Prova1.class);
                                startActivity(intent);
                               
                }
        });
       
    }
   
    private void exitButtonClick(){
        finish();
    }
   
   
    public static DefaultHttpClient getClient() {

                 DefaultHttpClient ret = null;

                // sets up parameters
             HttpParams params = new BasicHttpParams();
             HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
             HttpProtocolParams.setContentCharset(params, "utf-8");
             params.setBooleanParameter("http.protocol.expect-continue", false);
               
                // registers schemes for both http and https
             SchemeRegistry registry = new SchemeRegistry();
             registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
             registry.register(new Scheme("https", new FakeSocketFactory(), 443));     //risolve il problema del certificato per siti con https
             ThreadSafeClientConnManager manager = new ThreadSafeClientConnManager(params,registry);
             ret = new DefaultHttpClient(manager, params);
             return ret;
            }

}

La seconda activity, Prova1.java, è in pratica una webview che dovrebbe visualizzare la pagina del sito successiva all'inserimento del codice utente.
Codice (Java): [Seleziona]
package com.kenshiro.prova;

import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.view.KeyEvent;






public class Prova1 extends Prova {


        private WebView webView;
            /** Called when the activity is first created. */
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.second);
                webView = (WebView) findViewById(R.id.webView);
                webView.getSettings().setJavaScriptEnabled(true);
                webView.loadUrl("https://ib.mps.it/web/mbts/home?p_p_id=mpsmobileauthentication_WAR_mb20presentationmobile&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_pos=1&p_p_col_count=6");
                webView.setWebViewClient(new HelloWebViewClient());
               

            }
           
            private class HelloWebViewClient extends WebViewClient {
                @Override    
                public boolean shouldOverrideUrlLoading(WebView view, String url) {        
                        view.loadUrl(url);        
                        return true;    
                        }
                }  
           
            @Override
            public boolean onKeyDown(int keyCode, KeyEvent event) {    
                if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {        
                        webView.goBack();        
                        return true;    
                        }    
                return super.onKeyDown(keyCode, event);
                }
           
Avendo inserito nella prima activity un codice utente casuale, dovrebbe visualizzare una pagina di errore del tipo: "codice utente inserito non valido".
Invece ne appare un'altra in cui mi dice che non ho inserito il codice utente.
Dunque il problema è che la stringa inserita prima non è stata inviata!
Dov'è che ho sbagliato?
Grazie