|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jun 2013
Messaggi: 133
|
[java] Aprire browser con URL contenente parametri in Post
Ciao! Dal mio programma java, usando la classe Desktop() riesco ad aprire la pagina che desidero sul mio browser. Ma il mio problema è che la pagina, scritta in php, per far visualizzare il contenuto, deve ricevere dei parametri in POST. Quindi come faccio a passarli? Sapete come fare?
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Non è chiaro se desideri veramente aprire la pagina nel browser o se stai semplicemente cercando di fare una post. Nel secondo caso non c'è bisogno di aprire il browser, java supporta nativamente i socket e grazie ad essi sono state implementate numerosi client http.
Se invece vuoi proprio che l'utente veda il browser con la pagina web ci sono varie possibilità più o meno complesse. La più semplice che mi viene in mente è questa: 1) da java crea un file html nel quale inserisci un form con tutti i parametri, ed aggiungi una funzione javascript per sottomettere automaticamente il form al caricamento della pagina; 2) esegui il browser passando come indirizzo: "file:///path_assoluto_del_file_creato", per esempio: "iexplorer.exe file:///C:/post.html". |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Allora puoi provare la soluzione che ho proposto.
In alternativa, se il server è tuo (nel senso che puoi scriverci del codice) potresti anche iniettargli i dati dall'app java (salvandoli ad esempio in un db o un file temporaneo) e generare un id da usare nell'url per richiamare tali dati dal browser usando una semplice get. |
|
|
|
|
|
#6 | ||
|
Member
Iscritto dal: Jun 2013
Messaggi: 133
|
Quote:
Devo aprire una pagina attraverso il browser, credo di essere stato chiaro... La pagina d'altra parte per mostrare il contenuto deve ricevere un parametro che dev'essere passato attraverso post e non get. Se fosse get, l'avrei già fatto.... Quote:
non è quello che devo fare... |
||
|
|
|
|
|
#7 | |
|
Member
Iscritto dal: Jun 2013
Messaggi: 133
|
Quote:
Per una variabile in post devo fare tutto sto macello?? No no l'ho detto, è il caldo... Per quale ragione devo passare in get se voglio oscurare il parametro che passo?? Ci sarà un motivo se passo in post... Piuttosto se dovessi passare in get cripto la variabile e aggiungo alla stringa dell'url... Dalla pagina catturo il parametro decripto e ho risolto. Ma non ho intenzione di muovermi in questa direzione... Per una sola variabile devo fare tutto sto casino... Non ci credo è impossibile... Sicuramente c è un modo per aprire sto browser passando url con parametro post... |
|
|
|
|
|
|
#8 | ||
|
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Quote:
Quote:
EDIT: non avevo ancora visto il tuo ultimo post, ci penserò su... |
||
|
|
|
|
|
#9 | |
|
Member
Iscritto dal: Jun 2013
Messaggi: 133
|
Quote:
Riguardo al tuo suggerimento, mi sembra un po' eccessivo ho come l'impressione che mi hai frainteso o sono io che non ti seguo. Ma dall'altra parte, cioè nella pagina, ho questo: Codice PHP:
Codice:
String url = "http://miosito.com/req.php?variabile="+variabile; Desktop.getDesktop().browse(new URI(url)); |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Quote:
L'unico modo "standard" che conosco di passare qualcosa al browser è tramite url, ed ovviamente l'url non può essere nascosto. Criptare la variabile ha un'utilità abbastanza limitata, anche se non si capisce quale sia il valore reale, può sempre essere riutilizzata. Piuttosto dovresti generare dei token monouso e a scadenza, e passarli nell'url. Ho capito che non vuoi passare sul disco... e lo standard input? Non so quanto sia portabile, vedi se ti va bene questo: http://unix.stackexchange.com/questi...fox-read-stdin |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Ma in pratica questa variabile che cos'è? Una password?
Se si, è personale dell'utente che usa il software, o è di un'utenza tecnica (condivisa da più utenti)? Se fornisci queste informazioni forse si può trovare una soluzione migliore, magari potrebbero anche venire alla luce falle di sicurezza... |
|
|
|
|
|
#12 | |
|
Member
Iscritto dal: Jun 2013
Messaggi: 133
|
Quote:
Un conto se, la pagina che ricevere e si deve aprire, accetta una "costante" e quindi mostra il contenuto, indipendentemente da chi effettua l'azione, ma che ragione avrei di passarla in post? La lascio nella pagina metto link e si apre il browser con tutto il contenuto oppure la tolgo del tutto... A me occorre quella variabile perché rintraccio l'utente attraverso quel parametro e mostro il rispettivo contenuto... Poi se tu riesci a risolvere tutte queste problematiche sarò lieto di implementare il tuo suggerimento. Posta qualche riga così capisco meglio come lo risolvi. |
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
La variabile viene cablata nel form html all'atto della scrittura del file.
Ecco il pseudo-codice da inserire nel programma java: Codice:
String s = "<html>
<form name="mio_form" method=\"post\" action=\"http://miosito.com/req.php\">
<input type=\"hidden\" name=\"variabile\" value=\"" + variabile + "\">
</submit>
<script>
forms['mio_form'].submit();
</script>
</html>";
ClasseACME.writeStringToFile(s, "C:\submit.html");
Process p = ClasseACME.execute("iexplorer.exe file:///C:/submit.html");
Thread.sleep(2000);
ClasseACME.delete("C:\submit.html");
Il programma java crea una pagina web sul disco locale contente un form già precompilato che punta al tuo sito. Quando il browser apre il file, il codice javascript sottomette automaticamente il form, e nel browser viene visualizzata direttamente la risposta alla post del tuo sito. |
|
|
|
|
|
#14 | ||
|
Member
Iscritto dal: Jun 2013
Messaggi: 133
|
Quote:
Quote:
Ma infatti per questa ragione non desidero passare la variabile in get ma in post... |
||
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Quote:
Comunque puoi inventarti quello che vuoi, l'utente smaliziato, l'acaro di turno, riuscirà sempre a spiare quello che esce dal proprio pc. Se è per un esperimento o per un progetto amatoriale va bene, ma non affiderei mai il mio conto corrente ad un sistema del genere. |
|
|
|
|
|
|
#16 | |
|
Member
Iscritto dal: Jun 2013
Messaggi: 133
|
Quote:
Ma è già qualcosa, ti ringrazio! A occhio credo che funzioni... Sei stato molto gentile!!!! Ultima modifica di JohnMarston : 28-07-2015 alle 16:23. |
|
|
|
|
|
|
#17 |
|
Member
Iscritto dal: Jun 2013
Messaggi: 133
|
|
|
|
|
|
|
#18 |
|
Member
Iscritto dal: Jun 2013
Messaggi: 133
|
problemi qui...
cosa serve che non mi è chiaro il passaggio?? Codice:
ClasseACME.writeStringToFile(s, "C:\submit.html");
Process p = ClasseACME.execute("iexplorer.exe file:///C:/submit.html");
Thread.sleep(2000);
ClasseACME.delete("C:\submit.html");
"ClasseACME" sta per? |
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Hai mai visto Wile il coyote? Tutti i marchingegni che utilizzava erano prodotti dalla ACME (A Company Making Everything, ovvero azienda che produce qualsiasi cosa); siccome non ricordo o non esistono classi standard per fare quelle operazioni ho supposto l'esistenza di una fantomatica Class Making Everything.
Conosci giá la classe per aprire il browser, dovrai usare un filewriter per scrivere il file. La classe file ti consente di cancellare il file. |
|
|
|
|
|
#20 |
|
Member
Iscritto dal: Jun 2013
Messaggi: 133
|
ok direi che grazie all'intervento di Daniels118 ho risolto... Nel mio piccolo ho aggiunto qualcosa per correggere.
Posto il codice, magari a qualcuno può servire. Codice:
import org.apache.commons.io.FileUtils;
public void sendPost(String variabile) {
try {
String s = "<html>\n" +
"<form name=\"FormType\" method=\"post\" action=\"http://miosito.com/req.php\">\n" +
"<input type=\"hidden\" name=\"variabile\" value=\""+variabile+"\">\n" +
"</form>\n" +
"<script type=\"text/javascript\">\n" +
" function autoClick () {\n" +
" document.forms[\"FormType\"].submit();\n" +
" }\n" +
" window.onload = autoClick;\n" +
"</script> \n" +
"</html>";
File htmlTemplateFile = new File("C:\\temp\\submit.html");
FileUtils.writeStringToFile(htmlTemplateFile, s);
Desktop.getDesktop().open(htmlTemplateFile);
try {
Thread.sleep(2000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
htmlTemplateFile.delete();
} catch (IOException e){
e.printStackTrace();
}
}
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:01.




















