我想要做的是从java应用程序提交一个web表单。我需要填写的表格位于:http://cando-dna-origami.org/Java中的HTTP POST(带文件上传)
表单提交后,服务器会发送一封确认电子邮件给给定的电子邮件地址,现在我只需手工检查。我试过手动填写表单,并且电子邮件发送得很好。 (还应该注意的是,当表单填写不正确时,页面会刷新并且不会给出任何反馈)。
我从来没有做过以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();
然而,它运行时似乎没有做任何事情 - 也就是说,我没有收到任何电子邮件,尽管程序确实向System.out打印了“200 OK”,这似乎表明从服务器收到了某些东西,虽然我不确定它究竟意味着什么。我认为问题可能出现在文件上传中,因为我不确定该数据类型是否需要不同的格式。
这是发送使用Java POST请求以正确的方式?我需要为文件上传做些不同的事情吗?谢谢!
阅读亚当的文章后,我使用的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请求,一个是表单,一个是其他数据。我仍在寻找一种将这些结合为一个请求的方法;有人知道这件事吗?
谢谢你的建议!我下载了Apache HttpClient并使用它编写了一段不同的代码;不幸的是,它似乎还没有做任何事情。问题仍然是我不确定如何组合表单和文件上传。见上面 – Reyan 2012-03-13 22:10:03
所以我建议你看看HTTP连接(我的答案的最后一段)的基础数据,因为这将阐明浏览器使用(正在工作)和你的程序(它是不工作) – 2012-03-14 01:58:06
现在我明白了。我已经更新了有关添加文件上传的信息。 – 2012-03-14 12:50:52