Вызов API POST пакета Flutter http возвращает 302 вместо 200, публикация успешна в БД
Привет, когда я делаю запрос на отправку API через Postman, получаю правильный код состояния как 200, но делаю тот же вызов api с пакетом flutter/http (v0.12.0+4) или DIO (v3.0.9), я получаю код состояния как 302, но публикация прошла успешно и данные были сохранены в БД. как я могу получить для этого статус 200 или есть лучший способ обработать перенаправление в сообщении
Обнаружены эти проблемы с концентратором git, но нет ответа о том, как исправить это https://github.com/dart-lang/http/issues/157
https://github.com/dart-lang/sdk/issues/38413
Code making API post
...........
final encoding = Encoding.getByName('utf-8');
final headers = {
HttpHeaders.contentTypeHeader: 'application/json; charset=UTF-8',
HttpHeaders.acceptHeader: 'application/json',
};
//String jsonBody = jsonEncode(feedRequest.toJsonData());
String jsonBody = feedRequest.toJsonData();
print('response.SubmitFeedApiRequest>:' + feedRequest.toJsonData());
print('jsonBody:>' + jsonBody);
String url ='https://myapp';
final response = await http.post(url,
headers: headers, body: jsonBody, encoding: encoding);
print('response.statusCode:' + response.statusCode.toString());
if (response.statusCode == 200) {
print('response.data:' + response.body);
} else {
print('send failed');
}
...............
=== ОБНОВЛЕННЫЙ РАБОЧИЙ КОД В ОТНОШЕНИИ @midhun-mp комментарий
final response = await http.post(url,
headers: headers, body: jsonBody, encoding: encoding);
print('response.statusCode:' + response.statusCode.toString());
if (response.statusCode == 302) {
//print('response.headers:' + response.headers.toString());
if (response.headers.containsKey("location")) {
final getResponse = await http.get(response.headers["location"]);
print('getResponse.statusCode:' + getResponse.statusCode.toString());
return SubmitFeedApiResponse(success: getResponse.statusCode == 200);
}
} else {
if (response.statusCode == 200) {
// print('response.data:' + response.body);
return SubmitFeedApiResponse.fromJson(json.decode(response.body));
}
return SubmitFeedApiResponse(success: false);
}
}
1 ответ
302 - это не ошибка, это код состояния перенаправления. Пакет http не поддерживает перенаправление для запроса POST.
Таким образом, вам нужно вручную обрабатывать перенаправление. В свой код вы также должны добавить условие для кода состояния 302. Когда код состояния 302, найдите URL-адрес перенаправления в заголовке ответа и выполните HTTP GET для этого URL-адреса.
Просто добавьте дополнительный заголовок,
header : "Accept" : "application/json"