cURL and HttpURLConnection - Post JSON Data

59,324

Solution 1

OutputStream expects to work with bytes, and you're passing it characters. Try this:

HttpURLConnection httpcon = (HttpURLConnection) ((new URL("a url").openConnection()));
httpcon.setDoOutput(true);
httpcon.setRequestProperty("Content-Type", "application/json");
httpcon.setRequestProperty("Accept", "application/json");
httpcon.setRequestMethod("POST");
httpcon.connect();

byte[] outputBytes = "{'value': 7.5}".getBytes("UTF-8");
OutputStream os = httpcon.getOutputStream();
os.write(outputBytes);

os.close();

Solution 2

You may want to use the OutputStreamWriter class.

final String toWriteOut = "{'value': 7.5}";
final OutputStreamWriter osw = new OutputStreamWriter(connection.getOutputStream());
osw.write(toWriteOut);
osw.close();
Share:
59,324
Tapas Bose
Author by

Tapas Bose

Java developer.

Updated on July 05, 2022

Comments

  • Tapas Bose
    Tapas Bose almost 2 years

    How to post JSON data using HttpURLConnection? I am trying this:

    HttpURLConnection httpcon = (HttpURLConnection) ((new URL("a url").openConnection()));
    httpcon.setDoOutput(true);
    httpcon.setRequestProperty("Content-Type", "application/json");
    httpcon.setRequestProperty("Accept", "application/json");
    httpcon.setRequestMethod("POST");
    httpcon.connect();
    
    StringReader reader = new StringReader("{'value': 7.5}");
    OutputStream os = httpcon.getOutputStream();
    
    char[] buffer = new char[4096];
    int bytes_read;    
    while((bytes_read = reader.read(buffer)) != -1) {
        os.write(buffer, 0, bytes_read);// I am getting compilation error here
    }
    os.close();
    

    I am getting compilation error in line 14.

    The cURL request is:

    curl -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d "{'value': 7.5}" \
    "a URL"
    

    Is this the way to handle cURL request? Any information will be very helpful to me.

    Thanks.

  • crowmagnumb
    crowmagnumb over 10 years
    Is it not possible to send a complex json object in this manner? For instance ... "{"points":[{"point":{"latitude":40.8195085182092,"longitude‌​":-73.75127574479318‌​},"description":"tes‌​t"},{"point":{"latit‌​ude":40.219508518209‌​2,"longitude":-74.75‌​127574479318},"descr‌​iption":"test2"}],"m‌​ode":"WALKING"}" ... is an object that I'm sending via this method and I get an HTTP Response Code of 500.
  • user1002601
    user1002601 over 10 years
    @CrowMagnumb You should post a separate question. 500 means that the server has an internal error trying to process your request.
  • crowmagnumb
    crowmagnumb over 10 years
    OK, I've done so here Thanks for the suggestion.
  • Darpan
    Darpan almost 9 years
    what would be the benefit over OutputStream?