Что я хочу сделать, это отправить веб-форму из приложения Java. Форма, которую мне нужно заполнить, находится здесь: http://cando-dna-origami.org/
Когда форма отправляется, сервер отправляет электронное письмо с подтверждением на указанный адрес электронной почты, который на данный момент я просто проверяю вручную. Я пробовал заполнять форму вручную, и письма отправляются отлично. (Следует также отметить, что, когда форма заполняется неправильно, страница просто обновляется и не дает никакой обратной связи).
Я раньше ничего не делал с http, но я некоторое время огляделся и придумал следующий код, который должен отправить запрос POST на сервер:
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();
Однако, когда он запускается, он ничего не делает, то есть я не получаю никаких писем, хотя программа печатает "200 OK" на System.out, что, как представляется, указывает на то, что что-то получено с сервера, хотя я не уверен, что именно это означает. Я думаю, проблема может быть в загрузке файлов, так как я не был уверен, нужен ли этот тип данных в другом формате.
Является ли это правильным способом отправки запроса POST с использованием Java? Нужно ли мне делать что-то другое для загрузки файлов? Спасибо!
После прочтения записи Adam я использовал 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, один с формой и один с другими данными. Я все еще ищу способ объединить их в один запрос; кто-нибудь знает об этом?