0

Can anyone refer me to a single, simple resource explaining how to in Java make an HTTP POST with JSON object as data? I want to be able to do this without using Apache HTTP Client.

The following is what I've done so far. I am trying to figure out how to modify it with JSON.

 public class HTTPPostRequestWithSocket {

     public void sendRequest(){

         try {
            String params = URLEncoder.encode("param1", "UTF-8")
                + "=" + URLEncoder.encode("value1", "UTF-8");
            params += "&" + URLEncoder.encode("param2", "UTF-8")
                + "=" + URLEncoder.encode("value2", "UTF-8");

            String hostname = "nameofthewebsite.com";
            int port = 80;

           InetAddress addr = InetAddress.getByName(hostname);
           Socket socket = new Socket(addr, port);
           String path = "/nameofapp";

        // Send headers
        BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF8"));
        wr.write("POST "+path+" HTTP/1.0rn");
        wr.write("Content-Length: "+params.length()+"rn");
        wr.write("Content-Type: application/x-www-form-urlencodedrn");
        wr.write("rn");

        // Send parameters
        wr.write(params);
        wr.flush();

        // Get response
        BufferedReader rd = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String line;

        while ((line = rd.readLine()) != null) {
            System.out.println(line);
            }

        wr.close();
        rd.close();
        socket.close();//Should this be closed at this point?
        }catch (Exception e) {e.printStackTrace();}
    }

}

Daron
  • 329
  • 1
  • 4
  • 24

1 Answers1

0

JSON is just a string.

Just add the json objet as a post value.

List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("jsonData", new JSONObject(json)));//json
params.add(new BasicNameValuePair("param1", "somevalue"));//regular post value
meda
  • 45,103
  • 14
  • 92
  • 122