Android在HttpClient中获得403后的响应

时间:2011-08-11 11:42:17

标签: java android httpclient http-status-code-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禁止获取错误消息

,我也希望得到回应

2 个答案:

答案 0 :(得分:13)

如果返回成功代码(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的{​​{1}} ResponseHandler并直接返回HttpResponse。然后以同样的方式拨打EntityUtils.toString(response.getEntity())

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

答案 1 :(得分:2)

根据BasicResponseHandler的文档:

  

如果回复不成功(&gt; = = 300状态代码),则抛出HttpResponseException

你可以捕获这种类型的异常(注意:你已经捕获了这个异常的超类型ClientProtocolException)并且你可以在catch块中放置一些自定义逻辑来在遇到错误时创建/保存一些响应情况,如403。