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 agregar json al cuerpo de una publicación http en java
  • Cómo establecer encabezados HttpPost para una solicitud de cliente en Java Android
  • Dfferencia entre el uso de URLCOnnection Object y Httppost en el cliente android
  • php no está recibiendo datos que envió httppost en android
  • Android, Java: Solicitud HTTP POST
  • Solicitud de lote con youtube api: obtenga la información de vídeo más reciente de varios canales
  • Android, http: ¿Cómo subir un archivo a un sitio alojado por un servidor compartido?
  • Android Volley Post Solicitud. ¿Cómo setEntity?
  • Enviar una cadena en Android con HttpPost sin usar nameValuePairs
  • Cómo POST JSON todo en bruto en el cuerpo de una solicitud de Retrofit?
  • Android, ¿por qué el método HttpPost devuelve dos resultados diferentes en Android v2.3 y Android v4.0.3?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.