Estoy tratando de implementar una simple publicación JSON en la URL que acepta JSON en el cuerpo con autenticación básica en ANDROID.Android - HttpClient JSON POST con autenticación básica
He intentado con HttpUrlConnection
pero me "desautorizaron" y mis datos se envían al servidor.
Otra forma que probé es usar HttpClient
, pero ahora me sale un problema diferente. La autenticación funciona perfectamente pero los datos no se envían al servidor ...
Solo para estar seguro, configuré una pequeña prueba en un simple proyecto de Java (no en el entorno de Android).
Este es el código que estoy usando a POST al servidor:
DefaultHttpClient httpClient = new DefaultHttpClient();
ResponseHandler<String> resonseHandler = new BasicResponseHandler();
HttpPost postMethod = new HttpPost("http://localhost/api/v1/purchase/");
postMethod.setEntity(new StringEntity("{\"amount_adult\" : 1, \"object_id\" : 13}"));
postMethod.setHeader("Content-Type", "application/json");
String authorizationString = "Basic " + Base64.encodeToString(("travelbuddy" + ":" + "travelbuddy").getBytes(), Base64.DEFAULT); //this line is diffe
postMethod.setHeader("Authorization", authorizationString);
String response = httpClient.execute(postMethod,resonseHandler);
System.out.println("response :" + response);
El código en el proyecto Java funciona perfecto.
Cuando intento exactamente el mismo código en Android, recibo internal server error
del servidor, lo que significa que los datos JSON no se han recibido.
Realmente no entiendo por qué esto funciona en JAVA pero no en Android.
El efecto que me gustaría lograr, es el siguiente comando:
curl --dump-header - -H "Content-Type: application/json" -X
POST --data '{"amount_adult":1, "object_id":13}'
--user travelbuddy:travelbuddy http://localhost/api/v1/purchase/
Gracias por su respuesta, que se acaba de ilustrar en este código "localhost", en realidad, yo uso la ruta completa del dominio. – user1674948
Desde su punto de vista, ¿es esta la forma correcta de hacer la publicación del cuerpo de JSON en el servidor? Tal vez es solo un emulador que no funciona? – user1674948
Tu código es correcto. Si está probando en Emulator, use la dirección IP 10.0.2.2 en su lugar. Consulte http://developer.android.com/tools/devices/emulator.html#networkaddresses. – secondflying