Quello che voglio fare è inviare un modulo web da un'applicazione java. Il modulo che ho bisogno di compilare si trova qui: http://cando-dna-origami.org/Http POST in Java (con upload di file)
Quando il modulo viene inviato, il server invia una e-mail di conferma all'indirizzo di posta elettronica indicato, che per ora sto solo controllando a mano. Ho provato a compilare il modulo manualmente e le e-mail vengono inviate correttamente. (Va anche notato che quando il modulo è compilato in modo errato, la pagina si aggiorna e non fornisce alcun feedback).
non ho mai fatto nulla con http prima, ma mi sono guardato intorno per un po ', e si avvicinò con il seguente codice, che dovrebbe inviare una richiesta POST al server:
String data = "name=M+V&affiliation=Company&email="
+ URLEncoder.encode("[email protected]", "UTF-8")
+ "&axialRise=0.34&helixDiameter=2.25&axialStiffness=1100&bendingStiffness=230" +
"&torsionalStiffness=460&nickStiffness=0.01&resolution=course&jsonUpload="
+ URLEncoder.encode("C:/Users/Marjie/Downloads/twisted_DNA_bundles/monotwist.L1.v1.json",
"UTF-8") + "&type=square";
URL page = new URL("http://cando-dna-origami.org/");
HttpURLConnection con = (HttpURLConnection) page.openConnection();
con.setDoOutput(true);
con.setRequestMethod("POST");
con.connect();
OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream());
out.write(data);
out.flush();
System.out.println(con.getResponseCode());
System.out.println(con.getResponseMessage());
out.close();
con.disconnect();
Tuttavia , quando viene eseguito non sembra fare nulla - cioè, non ricevo nessuna email, anche se il programma stampa "200 OK" su System.out, che sembra indicare che qualcosa è stato ricevuto dal server, anche se non sono sicuro di cosa significhi esattamente. Penso che il problema potrebbe essere nel caricamento dei file, dal momento che non ero sicuro che quel tipo di dati richiedesse un formato diverso.
È un modo corretto di inviare una richiesta POST utilizzando Java? Devo fare qualcosa di diverso per il caricamento dei file? Grazie!
Dopo aver letto il post di Adam, ho usato Apache HttpClient e ha scritto il seguente codice:
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("type", "square"));
//... add more parameters
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params, HTTP.UTF_8);
HttpPost post = new HttpPost("http://cando-dna-origami.org/");
post.setEntity(entity);
HttpResponse response = new DefaultHttpClient().execute(post);
post = new HttpPost("http://cando-dna-origami.org/");
post.setEntity(new FileEntity(new File("C:/Users/Marjie/Downloads/twisted_DNA_bundles/monotwist.L1.v1.json"), "text/plain; charset=\"UTF-8\""));
HttpResponse responseTwo = new DefaultHttpClient().execute(post);
Tuttavia, ancora non sembra essere di lavoro; di nuovo, non ero sicuro di come il file caricato si inserisse nel modulo, quindi ho provato a inviare solo due richieste POST separate, una con il modulo e una con gli altri dati. Sto ancora cercando un modo per combinarli in un'unica richiesta; qualcuno sa qualcosa di questo?
Grazie per i vostri consigli! Ho scaricato Apache HttpClient e ho scritto un altro pezzo di codice usando quello; sfortunatamente sembra che non stia ancora facendo nulla. Il problema è ancora che non sono sicuro di come combinare il modulo e il caricamento del file. Vedi sopra – Reyan
Quindi ti suggerisco di dare un'occhiata ai dati sottostanti che attraversano la connessione HTTP (l'ultimo paragrafo della mia risposta), in quanto ciò chiarirà le differenze tra l'uso del browser (che funziona) e il tuo programma (che non è funziona) –
Ora capisco. Ho aggiornato la risposta con informazioni sull'aggiunta di un caricamento di file. –