Lo que quiero hacer es enviar un formulario web desde una aplicación java. El formulario que necesito completar se encuentra aquí: http://cando-dna-origami.org/Http POST en Java (con carga de archivos)
Cuando se envía el formulario, el servidor envía un correo electrónico de confirmación a la dirección de correo electrónico indicada, que por ahora solo estoy verificando a mano. He intentado completar el formulario de forma manual y los correos electrónicos se envían bien. (También se debe tener en cuenta que cuando el formulario se rellena de manera incorrecta, la página se actualiza y no da ningún comentario).
que nunca he hecho nada con http antes, pero me miraron a su alrededor por un tiempo, y se acercó con el siguiente código, que se supone debe enviar una solicitud POST al servidor:
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();
Sin embargo , cuando se ejecuta, parece que no hace nada, es decir, no recibo ningún correo electrónico, aunque el programa imprime "200 OK" en System.out, lo que parece indicar que se recibió algo del servidor, aunque no estoy seguro de lo que significa exactamente. Creo que el problema podría estar en la carga del archivo, ya que no estaba seguro de si ese tipo de datos requería un formato diferente.
¿Es esta la forma correcta de enviar una solicitud POST utilizando Java? ¿Debo hacer algo diferente para la carga del archivo? ¡Gracias!
Después de leer el post de Adam, he utilizado Apache y escribió el siguiente código HttpClient:
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);
Sin embargo, todavía no parece estar funcionando; una vez más, no estaba seguro de cómo encajaba el archivo cargado en el formulario, así que intenté enviar dos solicitudes POST separadas, una con el formulario y otra con los demás datos. Todavía estoy buscando una manera de combinar esto en una sola solicitud; ¿Alguien sabe algo sobre esto?
Gracias por su consejo! Descargué Apache HttpClient y escribí un código diferente usando eso; desafortunadamente, todavía no parece estar haciendo nada. El problema sigue siendo que no estoy seguro de cómo combinar el formulario y la carga del archivo. Ver arriba – Reyan
Así que sugiero que eche un vistazo a los datos subyacentes que atraviesan la conexión HTTP (el último párrafo de mi respuesta), ya que eso aclarará las diferencias entre el uso del navegador (que está funcionando) y su programa (que no es no funciona) –
Ahora veo. Actualicé la respuesta con información sobre cómo agregar una carga de archivo. –