Điều tôi muốn làm là gửi biểu mẫu web từ ứng dụng java. Biểu mẫu tôi cần điền vào nằm ở đây: http://cando-dna-origami.org/Http POST bằng Java (với tải lên tệp)
Khi biểu mẫu được gửi, máy chủ gửi email xác nhận đến địa chỉ email đã cho, hiện tại tôi chỉ đang kiểm tra thủ công. Tôi đã thử điền vào biểu mẫu theo cách thủ công và email được gửi đi tốt. (Cũng cần lưu ý rằng khi biểu mẫu được điền không chính xác, trang chỉ làm mới và không đưa ra bất kỳ phản hồi nào).
Tôi chưa bao giờ làm bất cứ điều gì với http trước đây, nhưng tôi nhìn xung quanh một lúc, và đã đưa ra đoạn mã sau, mà là vụ phải gửi một yêu cầu POST đến 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();
Tuy nhiên , khi nó chạy nó không xuất hiện để làm bất cứ điều gì - đó là, tôi không nhận được bất kỳ email, mặc dù chương trình không in "200 OK" để System.out, mà dường như chỉ ra rằng một cái gì đó đã nhận được từ máy chủ, mặc dù tôi không chắc nó có ý nghĩa gì. Tôi nghĩ rằng vấn đề có thể là trong quá trình tải lên tệp, vì tôi không chắc liệu loại dữ liệu đó có yêu cầu định dạng khác hay không.
Đây có phải là cách chính xác để gửi yêu cầu POST bằng Java không? Tôi có cần phải làm gì đó khác để tải tệp lên không? Cảm ơn!
Sau khi đọc bài của Adam, tôi sử dụng Apache HttpClient và viết đoạn mã sau:
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);
Tuy nhiên, nó vẫn có vẻ không thể làm việc; một lần nữa, tôi đã không chắc chắn làm thế nào các tập tin tải lên phù hợp với hình thức, vì vậy tôi đã cố gắng chỉ gửi hai yêu cầu POST riêng biệt, một với các hình thức và một với các dữ liệu khác. Tôi vẫn đang tìm cách kết hợp chúng thành một yêu cầu; không ai biết điều gì về điều này?
Cảm ơn lời khuyên của bạn! Tôi đã tải xuống Apache HttpClient và đã viết một đoạn mã khác bằng cách sử dụng thay vào đó; tiếc là nó vẫn không có vẻ là làm bất cứ điều gì. Vấn đề vẫn là tôi không chắc chắn làm thế nào để kết hợp các hình thức và tải lên tập tin. Xem ở trên – Reyan
Vì vậy, tôi khuyên bạn hãy xem dữ liệu cơ bản đi qua kết nối HTTP (đoạn cuối cùng của câu trả lời của tôi), như vậy sẽ làm rõ sự khác biệt giữa việc sử dụng trình duyệt (đang hoạt động) và chương trình của bạn đang hoạt động) –
Bây giờ tôi hiểu. Tôi đã cập nhật câu trả lời với thông tin về cách thêm tệp tải lên. –