peticion example java post httpurlconnection

java - example - Cómo transmitir un objeto JSON a una solicitud POST HttpURLConnection



peticion post java (5)

No puedo ver qué está mal con este código:

JSONObject msg; //passed in as a parameter to this method HttpURLConnection httpCon = (HttpURLConnection) url.openConnection(); httpCon.setDoOutput(true); httpCon.setDoInput(true); httpCon.setUseCaches(false); httpCon.setRequestProperty( "Content-Type", "application/json" ); httpCon.setRequestProperty("Accept", "application/json"); httpCon.setRequestMethod("POST"); OutputStream os = httpCon.getOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8"); msg.write(osw); osw.flush(); osw.close(); os.close(); //probably overkill

En el servidor, no obtengo ningún contenido de publicación, una cadena de longitud cero.


Sigue este ejemplo:

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; }


Tratar

... 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();

para enviar datos

para recuperar datos intente:

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());


esto sin json Cadena de datos de la publicación al servidor

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(); }


HttpURLConnection es engorroso de usar. Con DavidWebb , una pequeña envoltura alrededor de HttpURLConnection, puedes escribirlo así:

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();

Si no te gusta, hay una lista de bibliotecas alternativas en el enlace proporcionado.

¿Por qué todos deberíamos escribir el mismo código repetitivo todos los días? Por cierto, el código anterior es más legible y menos propenso a errores. HttpURLConnection tiene una interfaz horrible. Esto tiene que ser envuelto!


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(); } } }`

llama a este methopd en doitbackground en asynctask