Android: Http post con parámetros que no funcionan

Necesito crear una petición HTTP POST con parámetros. Sé que hay muchos ejemplos por ahí, he intentado usar HTTPparams, NameValuePair etc, pero parece que no puede obtener el formato correcto para el servidor.

Server Type: REST based API utilizing JSON for data transfer
Content-type: application/json
Accept: application/json
Content-length: 47
{"username":"abcd","password":"1234"}

Puedo pasar estos encabezados pero no puedo parecen pasar estos parámetros "nombre de usuario", "contraseña". Aquí está mi código:

  HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost("http://www.mymi5.net/API/auth/login"); List<NameValuePair> pairs = new ArrayList<NameValuePair>(); pairs.add(new BasicNameValuePair("username","abcd")); pairs.add(new BasicNameValuePair("password","1234")); post.setHeader("Content-type", "application/json"); post.setHeader("Accept", "application/json"); UrlEncodedFormEntity entity = new UrlEncodedFormEntity(pairs,"UTF-8"); post.setEntity(entity); HttpResponse response = client.execute(post); 

He intentado depurar, pero no puedo ver si la entidad está conectada correctamente o no … ¿Qué estoy haciendo mal?

Gracias por adelantado. Maaz

4 Solutions collect form web for “Android: Http post con parámetros que no funcionan”

Prueba esto:

 HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost("http://www.mymi5.net/API/auth/login"); post.setHeader("Content-type", "application/json"); post.setHeader("Accept", "application/json"); JSONObject obj = new JSONObject(); obj.put("username", "abcd"); obj.put("password", "1234"); post.setEntity(new StringEntity(obj.toString(), "UTF-8")); HttpResponse response = client.execute(post); 

No estoy muy seguro, a partir de su descripción, pero parece que su servidor espera un objeto de contenido JSON en lugar de los datos que se codifican en la URL. Envía algo como esto como el cuerpo de tu publicación:

 {"username":"abcd","password":"1234"} 
 HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost("http://www.mymi5.net/API/auth/login"); List<NameValuePair> pairs = new ArrayList<NameValuePair>(); pairs.add(new BasicNameValuePair("username","abcd")); pairs.add(new BasicNameValuePair("password","1234")); UrlEncodedFormEntity entity = new UrlEncodedFormEntity(pairs,HTTP.UTF_8); post.setEntity(entity); HttpResponse response = client.execute(post); 

Sólo prueba esta coz funciona perfecto para mí cuando estoy tratando de HTTP post.

Esto probablemente funcionará para usted.

Suponiendo que ya tiene el objeto json.

NOTA: (1) en el servidor necesita manejar la solicitud th como utf-8 (también en el DB).

  @SuppressWarnings("unchecked") private static HttpResponse executePostRequest(JSONObject jsonData, String url) { DefaultHttpClient httpclient = new DefaultHttpClient(); HttpPost httpost = new HttpPost(url); try { httpost.setEntity(new ByteArrayEntity(jsonData.toString().getBytes("UTF8"))); httpost.setHeader("Accept", "application/json"); httpost.setHeader("Content-type", "application/json;charset=UTF-8"); httpost.setHeader("Accept-Charset", "utf-8"); HttpResponse httpResponse = httpclient.execute(httpost); return httpResponse; } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } 

Entonces en el cliente manejar la respuesta del servidor como este:

 String responseBody = EntityUtils .toString(response.getEntity(), "UTF-8"); 
  • Cómo publicar datos utilizando el método POST en Android
  • Cómo inhabilitar la solicitud de Volley de volver a intentarlo?
  • Exectuing http POST devuelve HTML en lugar de JSON
  • ¿Cómo hacer que OKHTTP envíe una solicitud sin un cuerpo de solicitud?
  • Los caracteres especiales desaparecen en la solicitud POST desde un teléfono Android
  • ¿Cómo subir el archivo usando la biblioteca Volley en android?
  • Configurar la autenticación de http
  • Respuesta HTTP POST en WebView en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.