我有这样的代码:
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禁止获取错误消息
,我也希望得到回应答案 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。