Обработка не-ок запросов в дротике

У меня есть этот простой фрагмент дротика:

import 'package:http/http.dart' as http;

Client _http = new BrowserClient();

final response = await _http
      .post(url, headers: someHeader, body: someValue);

Сервер для текущего запроса, возвращает Bad Request 400 ответ. Я хочу иметь возможность получить код состояния по некоторым причинам. Но как только _http.post мне звонят, я получаю эту ошибку:

POST http://localhost/path 400 (Bad Request)

Положить блок в try/catch не помогает, так как ловится исключение ClientException который не имеет информации о коде состояния и теле ответа (что важно здесь). Как я могу обрабатывать коды состояния здесь, без исключения?

ОБНОВИТЬ:

У меня есть этот фрагмент после _http.post() вызов:

if (response.statusCode == 400) {
  //  manage bad request
}

Но response является null, Итак statusCode здесь не доступно

ОБНОВЛЕНИЕ 2: я получаю запрос на сервере и могу отслеживать на сервере. Как я уже говорил, сервер отправляет 400 Bad Request ответ и работает просто отлично. Но получение ответа в Dart вызывает ошибку.

2 ответа

Я подозреваю, что URL, заголовок или тело недействительно как-то. (например, недопустимые символы в заголовке). Запрос на самом деле не отправляется на сервер, и поэтому ClientException бросается вместо того, чтобы дать вам ответ.

Response объект имеет поле statusCode где вы можете получить код состояния ответа. Вы можете сделать что-то подобное:

final response = await _http
  .post(url, headers: someHeader, body: someValue);
if (response.statusCode == 400) {
  //  manage bad request
}
Другие вопросы по тегам