我一直在开发一个对Web服务使用GET和POST请求的应用程序。 GET请求没有问题,但POST请求正在扼杀我。我在代码中尝试了两种不同的场景。第一个看起来像这样......
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(ws);
JSONObject jsonObject = new JSONObject();
try {
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
jsonObject.put("action", "login");
jsonObject.put("username", "*********");
jsonObject.put("password", "*********");
httppost.setHeader("jsonString", jsonObject.toString());
StringEntity se = new StringEntity( jsonObject.toString());
se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
httppost.setEntity(se);
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
textview.setText(getResponse(response.getEntity()));
} catch (ClientProtocolException e) {
textview.setText(e.getLocalizedMessage());
} catch (IOException e) {
textview.setText(e.getLocalizedMessage());
} catch (JSONException e) {
textview.setText(e.getLocalizedMessage());
}
这段代码为我得到了这个结果......
“错误请求(标头名称无效)”
现在这是我的第二段代码......
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(ws);
JSONObject jsonObject = new JSONObject();
try {
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
jsonObject.put("action", "login");
jsonObject.put("username", "******");
jsonObject.put("password", "******");
nameValuePairs.add(new BasicNameValuePair("jsonString", jsonObject.toString()));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
textview.setText(getResponse(response.getEntity()));
} catch (ClientProtocolException e) {
textview.setText(e.getLocalizedMessage());
} catch (IOException e) {
textview.setText(e.getLocalizedMessage());
} catch (JSONException e) {
}
这给了我一个完全不同的结果。这是一个长期乱码的xml和SOAP,确实有一个SOAP异常... ...
“服务器无法处理请求.--- System.Xml.XmlException:根级别的数据无效。第1行,第1位。”
现在,任何人都可以了解我做错了什么。
答案 0 :(得分:2)
在你的第二段代码中添加::
// Execute HTTP Post Request
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters, HTTP.UTF_8);
httppost.setEntity(formEntity);
HttpResponse response = httpclient.execute(httppost);
答案 1 :(得分:0)
这有点旧,但我自己也有类似的问题。第一个例子是我走的路线;并且原始示例的问题是此行httppost.setHeader("jsonString", jsonObject.toString());
。它正在添加服务器无法解析的请求标头。
此外,nameValuePairs
的声明是不必要的。