我正在嘗試使用ANDROID上的基本身份驗證在身體中接受JSON的URL上實現一個簡單的JSON發佈。Android - 帶基本身份驗證的HttpClient JSON POST
我試過HttpUrlConnection
但我得到「未經授權」,我的數據被髮送到服務器。
我嘗試過的另一種方法是使用HttpClient
,但現在我遇到了另一個問題。身份驗證完美,但數據不會發送到服務器...
可以肯定的是,我在簡單的Java項目(而不是Android環境)中設置了一個小測試。
這是我用來發送到服務器的代碼:
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);
在Java項目中的代碼運行完美。
當我在Android中嘗試完全相同的代碼時,我從服務器獲取internal server error
,這意味着尚未收到JSON數據。
我真的不明白爲什麼這是在JAVA工作,但不是在Android。
,我想達到的效果,是下面的命令:
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/
謝謝您的回覆,我只是在此代碼「localhost」的說明,在現實中,我使用的域的完整路徑。 – user1674948
從你的角度來看,將JSON body發佈到服務器的正確方法是什麼?也許這只是一個模擬器不工作? – user1674948
你的代碼是正確的。如果您在模擬器中測試,請改用IP地址10.0.2.2。請參閱http://developer.android.com/tools/devices/emulator.html#networkaddresses。 – secondflying