Sto cercando di implementare un semplice post JSON sull'URL che accetta JSON nel corpo con autenticazione di base su ANDROID.Android - HttpClient JSON POST con autenticazione di base
Ho provato con HttpUrlConnection
ma ottengo "non autorizzato" e i miei dati vengono inviati al server.
Un altro modo in cui ho provato è utilizzare HttpClient
, ma ora ho un altro problema. L'autenticazione funziona perfettamente ma i dati non vengono inviati al server ...
Solo per sicurezza, ho impostato un piccolo test in un semplice progetto Java (non Android Environment).
Questo è il codice che sto usando POST al server:
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);
Il codice nel progetto Java funziona perfettamente.
Quando provo esattamente lo stesso codice in Android, ottengo internal server error
dal server, il che significa che i dati JSON non sono stati ricevuti.
Realmente non capisco perché questo funzioni in JAVA ma non in Android.
L'effetto che vorrei realizzare, è il seguente 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/
Grazie per la risposta, ho appena illustrato in questo codice "localhost", in realtà, io uso il percorso completo del dominio. – user1674948
Dal tuo punto di vista, questo è il modo corretto di fare il post del corpo JSON sul server? Forse è solo un emulatore che non funziona? – user1674948
Il tuo codice è giusto. Se si esegue il test in Emulator, utilizzare invece l'indirizzo IP 10.0.2.2. Consulta http://developer.android.com/tools/devices/emulator.html#networkaddresses. – secondflying