Android在HttpClient 403之后得到响应

我有这样的代码:

HttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(server); try { JSONObject params = new JSONObject(); params.put("email", email); StringEntity entity = new StringEntity(params.toString(), "UTF-8"); httpPost.setHeader("Content-Type", "application/json;charset=UTF-8"); httpPost.setEntity(entity); ResponseHandler<String> responseHandler = new BasicResponseHandler(); String responseBody = httpClient.execute(httpPost, responseHandler); JSONObject response = new JSONObject(responseBody); fetchUserData(response); saveUserInfo(); return true; } catch (ClientProtocolException e) { Log.d("Client protocol exception", e.toString()); return false; } catch (IOException e) { Log.d`enter code here`("IOEXception", e.toString()); return false; } catch (JSONException e) { Log.d("JSON exception", e.toString()); return false; } 

即使我有HTTP 403禁止得到错误信息,我想有一个响应

Solutions Collecting From Web of "Android在HttpClient 403之后得到响应"

如果返回成功代码(2xx),则BasicResponseHandler只会返回您的数据。 但是,您可以非常轻松地编写您自己的ResponseHandler以始终将响应正文作为String ,例如

  ResponseHandler<String> responseHandler = new ResponseHandler<String>() { @Override public String handleResponse(HttpResponse response) throws ClientProtocolException, IOException { return EntityUtils.toString(response.getEntity()); } }; 

或者,你可以在HttpClient上使用另一个重载的execute方法 ,它不需要ResponseHandler ,直接返回HttpResponse 。 然后以相同的方式调用EntityUtils.toString(response.getEntity())

要获得响应的状态代码,可以使用HttpResponse.getStatusLine().getStatusCode()并将其与HttpStatus类中的一个静态ints进行比较。 例如代码'403'是HttpStatus.SC_FORBIDDEN 。 您可以根据返回的状态代码采取与您的应用程序相关的特定操作。

根据BasicResponseHandler的文档:

如果响应不成功(> = 300状态码),则引发HttpResponseException

您可以捕获这种types的exception(注意:您已经捕获了此exceptionClientProtocolException的超types),并且可以在该catch块中放置一些自定义逻辑,以在遇到错误情况(如403)时创build/保存一些响应。