我最近通过Android上的http POST请求发送/接收数据时遇到了奇怪的问题。
我在设置Fiddler以监控Android应用和服务器之间的流量方面遇到了困难,因此我创建了简单的网络表单来模拟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 CONTENT并且显然没有XML文件。
请问有人请告诉我这两种方法怎么不相同而且反应不同?是编码还是缺少什么?
我很遗憾无法访问服务器而且我无法调试Android传出和传入数据,因为Fiddler和我连接到PC的模拟器/设备拒绝合作。
我还想知道我是否应该使用AndroidHttpClient
而不是DefaultHttpClient
,但我认为在这种情况下它不会改变任何内容。
提前致谢!
答案 0 :(得分:0)
由于马克西姆的评论,我发现了什么是错的。
这是POST_PARAM_DEVICE_ID常量中的一个愚蠢的小写字母。它的值是“deviceId”(并且应该是web形式中的“deviceID”)。
好吧,我的开发人员,在定义String键时要注意 - 它区分大小写!