简体   繁体   中英

Java HttpURLConnection is not sending a body

I'm trying to send a PUT request with a body to my API in my Android app with Java. I'm using the java.net HttpURLConnection and the request gets through. But without the body.

I refactored my code over and over again but it still does not work, at the moment I have following Task:

@Override
protected String doInBackground(String... urls) {
      String result = "";
      URL url;
      HttpURLConnection urlConnection = null;
      JSONObject body = new JSONObject();
      try {
          body.put("title", title);
          body.put("content", content);
          try {
              url = new URL(urls[0]);
              urlConnection = (HttpURLConnection) url.openConnection();
              urlConnection.setRequestMethod("PUT");
              urlConnection.addRequestProperty("username", username);
              urlConnection.addRequestProperty("password", password);
              urlConnection.addRequestProperty("Content-Type", "application/json; utf-8");
              urlConnection.addRequestProperty("Accept", "application/json");
              urlConnection.setDoOutput(true);

              try(OutputStream os = urlConnection.getOutputStream()){
                  byte[] input = body.toString().getBytes("utf-8");
                  os.write(input, 0, input.length);
              }

              InputStream in = urlConnection.getInputStream();
              InputStreamReader reader = new InputStreamReader(in);
              int data = reader.read();
              while (data != -1){
                  char current = (char) data;
                  result += current;
                  data += current;
                  data = reader.read();
              }
              return result;
          }catch (Exception e){
              e.printStackTrace();
              return null;
          }
      } catch (JSONException e) {
          e.printStackTrace();
          return  null;
      }
}

But this code leads always to an empty body.

EDIT

When changing content type to application/x-www-form-urlencoded the server gets the body. But this way I don't get a JSON file for further processing it.

The java code is working correctly. The API wasn't accepting JSON. Other languages worked without problems.

Server Info

  • Node.js
  • Express
  • Body Parser

I didn't add app.use(bodyParser.json());

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM