我最近遇到了一個奇怪的問題,當發送/接收數據通過HTTP POST請求在Android上。意外的響應在Android的HTTP POST請求
我在設置Fiddler來監視我的Android應用程序和服務器之間的流量時遇到困難,所以我創建了簡單的Web表單來模擬POST請求。
<form action="http://www.my.server.org/my_script.php" method="POST">
<input name="deviceID" type="text" width=30> Device ID <br>
<input name="lang" type="text" width=30> Language (en/cs) <br>
<input name="lastUpdated" type="text" width=30> Last Updated (yyyy-MM-dd hh:mm) <br>
<button type="submit">Send</button>
</form>
當我使用這個表單發送請求時,將返回一個帶有200 OK狀態碼和所需XML文件的響應。
我認爲這將相當於我的Android應用程序中的Java代碼。
private static final String POST_PARAM_LAST_UPDATED = "lastUpdated";
private static final String POST_PARAM_DEVICE_ID = "deviceId";
private static final String POST_PARAM_LANG = "lang";
...
// Create a POST Header and add POST Parameters
HttpPost httpPost = new HttpPost(URL_ARTICLES);
List<NameValuePair> postParameters = new ArrayList<NameValuePair>(3);
postParameters.add(new BasicNameValuePair(POST_PARAM_DEVICE_ID, deviceId));
postParameters.add(new BasicNameValuePair(POST_PARAM_LANG, lang));
postParameters.add(new BasicNameValuePair(POST_PARAM_LAST_UPDATED, lastUpdated));
httpPost.setEntity(new UrlEncodedFormEntity(postParameters));
// Create new HttpClient and execute HTTP Post Request
HttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(httpPost);
// Get and parse the response
List<Article> parsedArticles = new ArrayList<Article>();
HttpEntity entity = response.getEntity();
if (entity != null) {
parsedArticles = Parser.parseArticles(entity.getContent());
}
然而,即使當我把相同的參數值(如那些我把在web形式),在這種情況下的響應是204 NO含量和明顯沒有XML文件。
有人可以在這裏請告訴我這兩種方法是不是等同,反應不同?這是編碼還是我錯過了什麼?
我不幸沒有訪問服務器,我無法調試Android傳出和傳入數據,因爲Fiddler和連接到PC的模擬器/設備拒絕合作。
而且我還想知道是否應該使用AndroidHttpClient
而不是DefaultHttpClient
但我認爲在這種情況下不會改變任何內容。
在此先感謝!
您是否使用用戶/ paswd?嘗試更改編碼:'httpost.setEntity(new UrlEncodedFormEntity(nvps,HTTP.UTF_8));' –
我沒有在Web表單和Java代碼中使用用戶名和密碼。我也嘗試過按照你的建議設置編碼,但它沒有幫助。無論如何感謝您的評論! –
請添加const值aka:POST_PARAM_DEVICE_ID + deviceId ... –