Получить тело ответа на 400 HTTP-ответ в Android? - PullRequest
0 голосов
/ 12 октября 2011

Я связываюсь с API, который я не могу изменить, который отправляет ответ 400, когда запрос не проверен на стороне API.Это допустимый HTTP-запрос, но данные запроса не соответствуют правилам проверки приложения.

Ответ 400 содержит полезную нагрузку JSON, содержащую информацию о том, почему запрос не прошел проверку.

Я не могу получить тело ответа, потому что выдается исключение HttpRequestException.Кто-нибудь знает, как получить это тело ответа?

try {
        HttpUriRequest request = params[0];
        HttpResponse serverResponse = mClient.execute(request);

        BasicResponseHandler handler = new BasicResponseHandler();
        String response = handler.handleResponse(serverResponse);
        return response;
    } catch(HttpResponseException e) {
        // Threw HttpError
        Log.d(TAG, "HttpResponseException : " + e.getMessage());
        Log.d(TAG, "Status Code : " + e.getStatusCode());
        // TODO API returns 400 on successful HTTP payload, but invalid user data
        if(e.getStatusCode() == 400) {
                // Information on API error inside Response body
            }
   }

Ответы [ 3 ]

6 голосов
/ 12 октября 2011

Примерно так: org.apache.http.util.EntityUtils:

HttpRequestBase base = new HttpGet(url);
HttpResponse response = httpClient.execute(base);
String jsonString = EntityUtils.toString(response.getEntity());

PS: Это слепое кодирование, поскольку я не знаю, что вы пытались сделать.

Чтобы получить код состояния:

int statusCode = response.getStatusLine().getStatusCode();

Чтобы получить тело объекта в байтовом массиве:

byte[] data = EntityUtils.toByteArray(response.getEntity());
2 голосов
/ 14 апреля 2018

Попробуйте так:

if (this.responseCode == HttpURLConnection.HTTP_OK) {
 inputStream = httpUrlConnection.getInputStream();
} else {
inputStream = httpUrlConnection.getErrorStream();
}
0 голосов
/ 12 октября 2011

Вот так я отправляю и получаю Http-ответ как byte[]. Конечно, вы можете изменить его на строку, если хотите.

                byte[] buffer = new byte[1024];
                httpclient = new DefaultHttpClient();
                httppost = new HttpPost("http://www.rpc.booom.com");



                postParameters = new ArrayList<NameValuePair>();
                postParameters.add(new BasicNameValuePair("debug_data","1"));
                postParameters.add(new BasicNameValuePair("client_api_ver", "1.0.0.0"));
                postParameters.add(new BasicNameValuePair("device_identificator", deviceId));
                postParameters.add(new BasicNameValuePair("device_resolution", resolution));
                postParameters.add(new BasicNameValuePair("username_hash", hashUser(username,password)));
                postParameters.add(new BasicNameValuePair("password_hash", hashPass(username,password)));

                httppost.setEntity(new UrlEncodedFormEntity(postParameters));

                HttpResponse response = httpclient.execute(httppost);
                Log.w("Response ","Status line : "+ response.getStatusLine().toString());
                buffer = EntityUtils.toString(response.getEntity()).getBytes();

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...