Android POST request with parameters in json

I am developing an Android application in which I have to execute a POST request to the server, the request in the shell should look like this:

curl -v -H "Accept: application / xml" -H "Content-type: application / json" -X POST -d '{"marca": {"user_id": "78", "lugar_id": "2" , "tympo": "20:20:20", "distancia_recorrida": "300", "speedidad_maxima": "20.8", "speedidad_media": "15.8", "desnivel": "100", "aceleracion" ": "5.8", "fecha": "2027-11-28 13:32:30"}, "api_token": ""} 'nameOfSerVer

Well, my Java code looks like this:

HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(NameOfServer); try{ String marca ="{\"user_id\":\""+settings.getInt("user_id",0)+"\",\"lugar_id\":\""+id_lugar+"\",\"tiempo\":\""+tiempo+"\"," + "\"distancia_recorrida\":\""+distancia+"\",\"velocidad_maxima\":\""+round((b.getDouble("velMax")*3.6),2, BigDecimal.ROUND_UP)+"\"," + " \"velocidad_media\":" + "\""+velocidad_media+"\", \"desnivel\":\""+round(b.getDouble("maxDescenso"), 2, BigDecimal.ROUND_UP)+"\"," + " \"aceleracion\":\""+round(b.getDouble("ac")/9.806, 2, BigDecimal.ROUND_UP)+"\"," + " \"fecha\":\"2014-11-28 13:32:30\"}"; JSONObject json = new JSONObject(); json.put("marca", marca); json.put("api_token",settings.getString("api_token", "")); StringEntity se = new StringEntity(json.toString()); se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json")); httppost.setEntity(se); HttpResponse response = httpclient.execute(httppost); HttpEntity responseEntity =response.getEntity(); Log.e("USER", EntityUtils.toString(responseEntity).trim()); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block Log.e("USER", e.getMessage()); } catch (ClientProtocolException e) { // TODO Auto-generated catch block Log.e("USER", e.getMessage()); } catch (IOException e) { // TODO Auto-generated catch block Log.e("USER", e.getMessage()); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } 

It works fine with the command shell, but when sending a request from the phone, I DO NOT UPDATE

Any help would be greatly appreciated.

Thanks!

I did what a good user suggested, and here is what I got:

POST / marcas HTTP / 1.1 Content-length: 300 Content-Type: text / plain; encoding = ISO-8859-1 Content-Type: application / json Host:> HOSTNAME> Connection: Keep-Alive User-Agent: Apache-HttpClient / UNAVAILABLE (java 1.4) Expect: 100-Continue

HTTP / 1.1 100 Continue

 {"marca":"{\"user_id\":\"78\",\"lugar_id\":\"3\",\"tiempo\":\"00:14\",\"distancia_recorrida\":\"0.0\",\"velocidad_maxima\":\"0.0\", \"velocidad_media\":\"0.0\", \"desnivel\":\"0.0\", \"aceleracion\":\"0.01\", \"fecha\":\"2014-11-28 13:32:30\"}","api_token":"47fc42ea02a20456d7b901d5b26590a84d0a92d2"}HTTP/1.1 401 Authorization Required Date: Sun, 04 Dec 2011 02:48:37 GMT Server: Apache/2.2.9 (Debian) Phusion_Passenger/3.0.2 PHP/5.2.6-1+lenny9 with Suhosin-Patch X-Powered-By: Phusion Passenger (mod_rails/mod_rack) 3.0.2 X-UA-Compatible: IE=Edge,chrome=1 X-Runtime: 0.004435 Cache-Control: no-cache Status: 401 Vary: Accept-Encoding Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: text/html; charset=utf-8 e NOT AUTHORIZED 

It is strange that "\" appears in the mail request, and when viewing the code ... they come from a line that should ignore them ... right?

Still completely blind in this matter ...

+4
source share
1 answer

What is this, the error was in:

 String marca ="{\"user_id\":\""+settings.getInt("user_id",0) 

The server only accepts strings ... and it is parsed as an int.

Thanks to everyone! :)

0
source

Source: https://habr.com/ru/post/1384525/


All Articles