Hello, i want to understand these methods as a programmer. The only difference i know is that "get" sends the parameters via the url while "post" does not.
But what actually happens in the source code? How can i implement it?

I found some source code concerning the post method but i don't see it doing something practical. Would someone explain to me what i'm missing?

public static void postData(Reader data, URL endpoint, Writer output) throws Exception {
        HttpURLConnection urlc = null;
        try {
            urlc = (HttpURLConnection) endpoint.openConnection();
            try {
                urlc.setRequestMethod("POST");
            } catch (ProtocolException e) {
                throw new Exception("Shouldn't happen: HttpURLConnection doesn't support POST??", e);
            }
            urlc.setDoOutput(true);
            urlc.setDoInput(true);
            urlc.setUseCaches(false);
            urlc.setAllowUserInteraction(false);
            urlc.setRequestProperty("Content-type", "text/xml; charset=" + "UTF-8");

            OutputStream out = urlc.getOutputStream();

            try {
                Writer writer = new OutputStreamWriter(out, "UTF-8");
                pipe(data, writer);
                writer.close();
            } catch (IOException e) {
                throw new Exception("IOException while posting data", e);
            } finally {
                if (out != null) {
                    out.close();
                }
            }

            InputStream in = urlc.getInputStream();
            try {
                Reader reader = new InputStreamReader(in);
                pipe(reader, output);
                reader.close();
            } catch (IOException e) {
                throw new Exception("IOException while reading response", e);
            } finally {
                if (in != null) {
                    in.close();
                }
            }

        } catch (IOException e) {
            throw new Exception("Connection error (is server running at " + endpoint + " ?): " + e);
        } finally {
            if (urlc != null) {
                urlc.disconnect();
            }
        }
    }

    /**
     * Pipes everything from the reader to the writer via a buffer
     */
    private static void pipe(Reader reader, Writer writer) throws IOException {
        char[] buf = new char[1024];
        int read = 0;
        while ((read = reader.read(buf)) >= 0) {
            writer.write(buf, 0, read);
        }
        writer.flush();
    }

I did managed to implement the "get" method. But i'm not to sure it's done the right way. All i get as a response is the full text file from the server. Please check if it's the way to be done

private String sendGetRequest(String endpoint, String requestParameters) {
        String result = null;
        if (endpoint.startsWith("http://")) {
   // Send a GET request to the servlet
            try {
// Construct data
                StringBuffer data = new StringBuffer();

// Send data
                String urlStr = endpoint;
                if (requestParameters != null && requestParameters.length() > 0) {
                    urlStr += "?" + requestParameters;
                }
                URL url = new URL(urlStr);
                URLConnection conn = url.openConnection();

// Get the response
                BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                StringBuffer sb = new StringBuffer();
                String line;
                while ((line = rd.readLine()) != null) {
                    sb.append(line);
                }
                rd.close();
                result = sb.toString();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return result;
    }

Edited 6 Years Ago by Alex_: n/a

I am sorry for posting to this thread since I don't have anything new to add but I can't help to notice that you both have been down voted.
Congratulations.
Yet another post where someone, anonymous, decided for no reason and explanation, that an interesting question and a good answer should be down voted.

Looks like that the voting system is being repeatedly abused

Edited 6 Years Ago by javaAddict: n/a

Comments

There is an important philosophical difference, and one that most people don't realise.
Those same people don't realise that GET and POST are actually not all the possible http request methods, there are several others!

GET is intended for requesting data from the webserver.
POST is intended for submitting data TO the server to do something with.
Of course to request information requires sending information, and submitting information usually leads to the returning of more information as a result, blurring the distinction to an extent.

In general, using POST in combination with request forwarding (rather than redirection) causes cleaner URLs and shorter browser history when using html forms.
Some people also use it as an (ill conceived) security system as the request parameters aren't shown in the URL and thus they (incorrectly) think users can't see such things as cleartext passwords sent in the request.

Comments
extremely informative.
This article has been dead for over six months. Start a new discussion instead.