Failed to submit message form in Java

The purpose of the code is to insert the parameters into the form, then submit the form, which in turn enters the data into the MySQL database. The problem is that the method does not publish data. I'm not sure what I'm doing wrong, I looked at so many questions, but nothing works.

Here is the form.

<form action="http://localhost/Documents/dataadded.php" method="post">

<b>Add a New Data</b>

<p>Email Address:
<input type="text" name="email_address" size="30" value="" />
</p>

<p>Email Pass:
<input type="text" name="email_pass" size="30" value="" />
</p>

<p>
<input type="submit" name="submit" value="Send" />
</p>

</form>

Here is the Java code.

public static void main(String[] args) {


    String key1 = "email_address";
    String key2 = "email_pass";
    String key3 = "submit";

    String param1 = "testemail@gmail.com";
    String param2 = "password123";
    String param3 = "Send";
    try {
        URL website = new URL("http://localhost/Documents/added.php");

        Map<String,String> arguments = new LinkedHashMap<>();
        arguments.put(key1, param1);
        arguments.put(key2, param2);
        arguments.put(key3, param3);

        StringJoiner sj = new StringJoiner("&");
        for(Map.Entry<String,String> entry : arguments.entrySet())
            sj.add(URLEncoder.encode(entry.getKey(), "UTF-8") + "=" 
                 + URLEncoder.encode(entry.getValue(), "UTF-8"));
        byte[] out = sj.toString().getBytes(StandardCharsets.UTF_8);
        int length = out.length;

        HttpURLConnection connection =  (HttpURLConnection) website.openConnection(); 
        connection.setRequestMethod("POST");
        connection.setFixedLengthStreamingMode(length);
        connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
        connection.setDoOutput(true);
        connection.getOutputStream().write(out);


        System.out.println(sj.toString());

        InputStream response = connection.getInputStream();

        @SuppressWarnings("resource")
        Scanner scan = new Scanner(response);
        String responsebody = scan.useDelimiter("\\A").next();
        System.out.println(responsebody);



    } catch (IOException e) {

        e.printStackTrace();
    }

}

If someone can shed light on what is wrong with the code, he will be very grateful.

+6
source share
1 answer

You need to clear OutputStream before you can open InputStream. Below is the method that I created for POST requests.

private String doPost(String urlString, LinkedHashMap<String, String> params) throws Exception {
    //...make the content
    StringBuilder content = new StringBuilder();
    //...append params
    boolean first = true;
    for (Map.Entry<String, String> entry : params.entrySet()) {
        if (!first) {
            content.append("&");
        } else {
            first = false;
        }
        content.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), charset));
    }
    //... send POST request
    URL url = new URL(urlString);
    HttpURLConnection con;
    con = (HttpURLConnection) url.openConnection();
    con.setDoInput(true);
    con.setDoOutput(true);
    con.setUseCaches(false);
    try (OutputStreamWriter writer = new OutputStreamWriter(con.getOutputStream(), charset)) {
        writer.write(content.toString());
        writer.flush();
    }
    //...get response
    try (Scanner s = new Scanner(con.getInputStream(), charset)) {
        String resp = s.useDelimiter("\\A").hasNext() ? s.next() : "";
        return resp;
    }
}
0
source

All Articles