How to stream a JSON object to a HttpURLConnection POST request

前端 未结 5 2033
鱼传尺愫
鱼传尺愫 2021-02-05 14:09

I can not see what is wrong with this code:

JSONObject msg;  //passed in as a parameter to this method

HttpURLConnection httpCon = (HttpURLConnection) url.openC         


        
相关标签:
5条回答
  • 2021-02-05 14:56

    this without json String post data to server

     class PostLogin extends AsyncTask<Void, Void, String> {
            @Override
            protected String doInBackground(Void... params) {
                String response = null;
    
                Uri.Builder builder= new Uri.Builder().appendQueryParameter("username","amit").appendQueryParameter("password", "amit");
                String parm=builder.build().getEncodedQuery();
          try
               {
    
                   response = postData("your url here/",parm);
               }catch (Exception e)
               {
                   e.printStackTrace();
               }
                Log.d("test", "response string is:" + response);
                return response;
            }
        }
    
    
    private String postData(String path, String param)throws IOException {
            StringBuffer response = null;
    
            URL  url = new URL(path);
            HttpURLConnection  connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("POST");
            connection.setDoOutput(true);
    //        connection.setRequestProperty("Content-Type", "application/json");
    //        connection.setRequestProperty("Accept", "application/json");
                OutputStream out = connection.getOutputStream();
                out.write(param.getBytes());
                out.flush();
                out.close();
                int responseCode = connection.getResponseCode();
                if (responseCode == HttpURLConnection.HTTP_OK) {
                    BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                    String line;
                    response = new StringBuffer();
                    while ((line = br.readLine()) != null) {
                        response.append(line);
                    }
                    br.close();
                }
    
            return response.toString();
        }
    
    0 讨论(0)
  • 2021-02-05 15:01
     public String sendHTTPData(String urlpath, JSONObject json) {
            HttpURLConnection connection = null;
            try {
                URL url=new URL(urlpath);
                connection = (HttpURLConnection) url.openConnection();
                connection.setDoOutput(true);
                connection.setDoInput(true);
                connection.setRequestMethod("POST");
                connection.setRequestProperty("Content-Type", "application/json");
                connection.setRequestProperty("Accept", "application/json");
                OutputStreamWriter streamWriter = new OutputStreamWriter(connection.getOutputStream());
                streamWriter.write(json.toString());
                streamWriter.flush();
                StringBuilder stringBuilder = new StringBuilder();
                if (connection.getResponseCode() == HttpURLConnection.HTTP_OK){
                    InputStreamReader streamReader = new InputStreamReader(connection.getInputStream());
                    BufferedReader bufferedReader = new BufferedReader(streamReader);
                    String response = null;
                    while ((response = bufferedReader.readLine()) != null) {
                        stringBuilder.append(response + "\n");
                    }
                    bufferedReader.close();
    
                    Log.d("test", stringBuilder.toString());
                    return stringBuilder.toString();
                } else {
                    Log.e("test", connection.getResponseMessage());
                    return null;
                }
            } catch (Exception exception){
                Log.e("test", exception.toString());
                return null;
            } finally {
                if (connection != null){
                    connection.disconnect();
                }
            }
        }`
    

    call this methopd in doitbackground in asynctask

    0 讨论(0)
  • 2021-02-05 15:03

    Try

    ...
    httpCon.setRequestMethod("POST");
    httpCon.connect(); // Note the connect() here
    ...
    OutputStream os = httpCon.getOutputStream();
    OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8");
    ...    
    osw.write(msg.toString());
    osw.flush();
    osw.close();
    

    to send data.

    to retrieve data try:

    BufferedReader br = new BufferedReader(new InputStreamReader( httpCon.getInputStream(),"utf-8"));
    String line = null;
    while ((line = br.readLine()) != null) {
        sb.append(line + "\n");
    }
    br.close();
    System.out.println(""+sb.toString());
    
    0 讨论(0)
  • 2021-02-05 15:08

    HttpURLConnection is cumbersome to use. With DavidWebb, a tiny wrapper around HttpURLConnection, you can write it like this:

    JSONObject msg;  //passed in as a parameter to this method
    
    Webb webb = Webb.create();
    JSONObject result = webb.post("http://my-url/path/to/res")
        .useCaches(false)
        .body(msg)
        .ensureSuccess()
        .asJsonObject()
        .getBody();
    

    If you don't like it, there is a list of alternative libraries on the link provided.

    Why should we all write the same boilerplate code every day? BTW the code above is more readable and less error-prone. HttpURLConnection has an awful interface. This has to be wrapped!

    0 讨论(0)
  • 2021-02-05 15:11

    Follow this example:

    public static PricesResponse getResponse(EventRequestRaw request) {
    
        // String urlParameters  = "param1=a&param2=b&param3=c";
        String urlParameters = Piping.serialize(request);
    
        HttpURLConnection conn = RestClient.getPOSTConnection(endPoint, urlParameters);
    
        PricesResponse response = null;
    
        try {
            // POST
            OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
            writer.write(urlParameters);
            writer.flush();
    
            // RESPONSE
            BufferedReader reader = new BufferedReader(new InputStreamReader((conn.getInputStream()), StandardCharsets.UTF_8));
            String json = Buffering.getString(reader);
            response = (PricesResponse) Piping.deserialize(json, PricesResponse.class);
    
            writer.close();
            reader.close();
    
        } catch (Exception e) {
            e.printStackTrace();
        }
    
        conn.disconnect();
    
        System.out.println("PricesClient: " + response.toString());
    
        return response;
    }
    
    
    public static HttpURLConnection getPOSTConnection(String endPoint, String urlParameters) {
    
        return RestClient.getConnection(endPoint, "POST", urlParameters);
    
    }
    
    
    public static HttpURLConnection getConnection(String endPoint, String method, String urlParameters) {
    
        System.out.println("ENDPOINT " + endPoint + " METHOD " + method);
        HttpURLConnection conn = null;
    
        try {
            URL url = new URL(endPoint);
            conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod(method);
            conn.setDoOutput(true);
            conn.setRequestProperty("Content-Type", "text/plain");
    
        } catch (IOException e) {
            e.printStackTrace();
        }
    
        return conn;
    }
    
    0 讨论(0)
提交回复
热议问题