2012-11-28 32 views
1

我最近遇到了一個奇怪的問題,當發送/接收數據通過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但我認爲在這種情況下不會改變任何內容。

在此先感謝!

+1

您是否使用用戶/ paswd?嘗試更改編碼:'httpost.setEntity(new UrlEncodedFormEntity(nvps,HTTP.UTF_8));' –

+0

我沒有在Web表單和Java代碼中使用用戶名和密碼。我也嘗試過按照你的建議設置編碼,但它沒有幫助。無論如何感謝您的評論! –

+1

請添加const值aka:POST_PARAM_DEVICE_ID + deviceId ... –

回答

0

由於Maxim的評論,我發現了什麼是錯的。

這是POST_PARAM_DEVICE_ID常量中的一個愚蠢的小寫字母。它的值是「deviceId」(並且應該是web設備中的「deviceID」)。

那麼,我的開發人員在定義字符串鍵時要注意 - 它是區分大小寫的!