Invio dati di una form in POST e lettura della risposta da JAVA

di il
1 risposte

Invio dati di una form in POST e lettura della risposta da JAVA

Salve a tutti, grazie mille in anticipo per l'aiuto e scusate per l'eventuale ignoranza. Il mio quesito è questo:

in un sito web c'è una form, nella quale io inserisco Utente e Password. Quando clicco il pulsante "ACCEDI AL SISTEMA" i dati inseriti vengono mandati ad un WebServer (non mio) che mi risponde mandandomi la pagina richiesta. La form si trova qui: L'html della form è questo:
<form id="S4YForm" method="POST" action="default.asp?action=accesso_sistema">
                                <center>
                                    <table class="Main-Content-Cell-Body-Text-Table-Centro">
                                        <tr>
                                            <td nowrap class="Main-Content-Cell-Body-Text-Table-Login-Centro">
                                                <b>UTENTE</b>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td nowrap>
                                                <input type="text" name="username" id="username" value="USERNAME" autocomplete="off"
                                                    class="validate[required,minSize[8],custom[S4YSecure],funcCall[checkUSR]] Main-Content-Cell-Body-Text-Input-300"
                                                    onfocus="javascript:if(this.value==this.defaultValue){this.value='';}" onblur="javascript:if(this.value==''){this.value=this.defaultValue;}">
                                            </td>
                                        </tr>
                                        <tr>
                                            <td nowrap class="Main-Content-Cell-Body-Text-Table-Login-Centro">
                                                <b>PASSWORD [*]</b>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td nowrap>
                                                <input type="password" name="password" id="password" value="PASSWORD" autocomplete="off"
                                                    class="validate[required,minSize[8],custom[S4YSecure],funcCall[checkPWD]] Main-Content-Cell-Body-Text-Input-300"
                                                    onfocus="javascript:if(this.value==this.defaultValue){this.value='';}" onblur="javascript:if(this.value==''){this.value=this.defaultValue;}">
                                            </td>
                                        </tr>
                                        <tr>
                                            <td nowrap class="Main-Content-Cell-Body-Text-Table-Login-Centro">
                                                <b>MODALITA' DI ACCESSO</b>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td nowrap>
                                                <select name="remember_me" class="Main-Content-Cell-Body-Text-Input-300">
                                                    <option value="N" selected>RICHIEDI SEMPRE LE CREDENZIALI</option>
                                                    <option value="S">MEMORIZZA LE CREDENZIALI (30 GIORNI)</option>
                                                </select>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td nowrap nowrap class="Main-Content-Cell-Body-Text-Table-Login-Centro">[* Il sistema distingue tra MAIUSCOLE e minuscole]</td>
                                        </tr>
                                        <tr>
                                            <td align="center" nowrap>
                                                <input type="submit" value="ACCEDI AL SISTEMA" class="Main-Content-Cell-Body-Text-Login-Button">
                                            </td>
                                        </tr>
                                    </table>
                                </center>
                            </form>
Ora la mia domanda è questa: è possibile inviare le stesse informazioni (utente, password, ecc) da java e ricevere l'html corrispondente?

Io ho fato questo al momento ma il problema è che il secondo file è uguale al primo, quindi non riesco ad inviare i dati e ricevere una risposta:
try 
        {
            URL url = new URL("https://servizi.aia-figc.it/sinfonia4you/");
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            BufferedReader read = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            PrintWriter file = new PrintWriter(new BufferedWriter(new FileWriter("file.html")), true);
            System.out.println("Connesso");
            String line = read.readLine();
            String html = "";
            while(line != null)   
            {
                html += line;
                line = read.readLine();  
            }
            
            file.write(html);
            file.close();            
            System.out.println("Letto");
            
            read.close();
            //connection.disconnect();
            url = new URL("https://servizi.aia-figc.it/sinfonia4you/area_sistema/system_default/");
            connection = (HttpURLConnection) url.openConnection();

            // codifico le coppie di dati da inviare  
            String datiPost = URLEncoder.encode("username", "UTF-8") + "=" + URLEncoder.encode("mioUtente", "UTF-8");
            datiPost += "&" +  URLEncoder.encode("password", "UTF-8") + "=" + URLEncoder.encode("miaPassword", "UTF-8"); 
            datiPost += "&" +  URLEncoder.encode("remember_me", "UTF-8") + "=" + URLEncoder.encode("N", "UTF-8"); 

            // se devo inviare il dato in POST  
            connection.setDoOutput(true);  
            //connection.setChunkedStreamingMode(1);  

            // scrivo nello stream di uscita  
            OutputStreamWriter wr = new OutputStreamWriter(connection.getOutputStream());  
            wr.write(datiPost);   
            wr.flush();  
            wr.close();
            System.out.println("Mandato Credenziali");
            
            read = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            file = new PrintWriter(new BufferedWriter(new FileWriter("file2.html")), true);
            line = read.readLine();
            html = "";
            while(line != null)   
            {
                html += line;
                System.out.println(line);
                line = read.readLine();  
            }
            file.write(html);
            file.close();
            System.out.println("Letto2");
        } 
        catch(MalformedURLException ex) 
        {
            ex.printStackTrace();
        } 
        catch(IOException ioex) 
        {
            ioex.printStackTrace();
        }

1 Risposte

  • Re: Invio dati di una form in POST e lettura della risposta da JAVA

    Si puo' fare e si fa normalmente.
    Ma per farlo servono diverse compentenze:
    saper fare reverse engineering del protocollo http
    saper come si chiamano i campi della form
    saper costruire il messaggio di risposta.

    Ci sono diverse librerie che aiutano in questo: cerca http java, html java

    Comunque trovi tutto con Google.
    NON ESISTE un sistema standard: OGNI sito web funziona in modo diverso
Devi accedere o registrarti per scrivere nel forum
1 risposte