Что я хочу сделать, это отправить веб-форму из Java-приложения. Форма, которую мне нужно заполнить, находится здесь: http://cando -dna-origami.org /
Когда форма отправлена, сервер отправляет электронное письмо с подтверждением на указанный адрес электронной почты, который на данный момент я просто проверяю вручную. Я попытался заполнить форму вручную, и письма отправляются нормально. (Следует также отметить, что при неправильном заполнении формы страница просто обновляется и не дает никаких отзывов).
Я никогда ничего не делал с http раньше, но я некоторое время оглядывался по сторонам и придумал следующий код, который должен отправлять POST-запрос на сервер:
String data = "name=M+V&affiliation=Company&email="
+ URLEncoder.encode("m.v@gmail.com", "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();
Однако, когда он запускается, он, похоже, ничего не делает - то есть я не получаю никаких писем, хотя программа выводит «200 OK» в System.out, что, кажется, указывает на то, что что-то получено с сервера, хотя я не уверен, что именно это означает. Я думаю, что проблема может заключаться в загрузке файла, так как я не был уверен, требуется ли для этого типа данных другой формат.
Это правильный способ отправки запроса POST с использованием Java? Нужно ли делать что-то другое для загрузки файла? Спасибо!
Прочитав пост Адама, я использовал Apache 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);
Однако, похоже, он все еще не работает; Опять же, я не был уверен, как загруженный файл вписывается в форму, поэтому я попытался просто отправить два отдельных запроса POST, один с формой и один с другими данными. Я все еще ищу способ объединить их в один запрос; Кто-нибудь знает что-нибудь об этом?