当我使用Firefox的“REST客户端”或Google Chrome的“简单REST客户端”进行测试时,我的API看起来非常完美 但是,当我使用Android SDK发送Http请求时,我得到以下异常:
ClientProtocolException:服务器无法使用有效的HTTP响应进行响应
当我使用谷歌浏览器的“高级REST客户端”进行测试时,我得到了一个空的回复,所以对于可能导致这种情况的原因有任何想法吗?
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpResponse httpResponse = null;
HttpPost httpPost = new HttpPost(Constants.URL);
httpPost.setHeader("Content-Type", "application/json");
httpPost.setHeader("Accept", "application/json");
StringEntity se = new StringEntity(params,HTTP.UTF_8);
httpPost.setEntity(se);
httpClient.execute(httpPost);
答案 0 :(得分:0)
您的代码似乎是正确的。
如果客户端有ClientProtocolException
或服务器有INVALID REQUEST
,则会发生 INVALID RESPONSE
此外,您已指定httpPost.setHeader("Accept", "application/json");
它希望服务器返回JSON
响应。有关详细信息,请参阅docs。
因此,您可以查看从服务器发送的响应。它应该是JSON响应。
或者您可以尝试删除httpPost.setHeader("Accept", "application/json");
并检查您的回复。
答案 1 :(得分:0)
这应该有效
HttpParams httpParams=new BasicHttpParams();
DefaultHttpClient httpClient = new DefaultHttpClient(httpParams);
HttpResponse httpResponse = null;
HttpPost httpPost = new HttpPost(Constants.URL);
httpPost.setHeader("Content-Type", "application/json");
httpPost.setHeader("Accept", "application/json");
StringEntity se = new StringEntity(params,HTTP.UTF_8);
httpPost.setEntity(se);
httpClient.execute(httpPost);