Android получает ответ после 403 в HttpClient

У меня такой код:

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 Forbidden, чтобы получить сообщение об ошибке

Solutions Collecting From Web of "Android получает ответ после 403 в HttpClient"

BasicResponseHandler возвращает ваши данные только в том случае, если был возвращен код успеха (2xx). Однако вы можете легко написать свой собственный ResponseHandler чтобы всегда возвращать тело ответа как String , например

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

Кроме того, вы можете использовать другой перегруженный метод execute на HttpClient который не требует ResponseHandler и сразу возвращает HttpResponse . Затем вызовите EntityUtils.toString(response.getEntity()) таким же образом.

Чтобы получить код состояния ответа, вы можете использовать HttpResponse.getStatusLine().getStatusCode() и сравнить с одним из статических ints в классе HttpStatus . Например, код «403» – это HttpStatus.SC_FORBIDDEN . Вы можете предпринять конкретные действия, имеющие отношение к вашему приложению, в зависимости от возвращаемого кода состояния.

Согласно документации для BasicResponseHandler :

Если ответ был неудачным (> = код состояния 300), генерирует HttpResponseException .

Вы можете поймать этот тип исключения (обратите внимание: вы уже ClientProtocolException супертип этого исключения ClientProtocolException ), и вы можете поместить некоторую пользовательскую логику в этот блок catch, чтобы создать / сохранить некоторый ответ, когда вы столкнулись с ситуацией с ошибкой, такой как 403.