#api #flutter #http #flutter-web
#API #флаттер #http #flutter-web
Вопрос:
Я использую следующий код для своего api. Этот api работает в postman, но показывает код ошибки 404 в http flutter.
Мой код flutter:
RaisedButton(
onPressed: () {
apiCall();
},
child: Text("Press"),
)
Future apiCall() async {
var body =
jsonEncode({"filepath": "patient/reports/1602333458533-Liver.jpg"});
try {
await http
.post('http://3.6.197.52:3100/downloadFile',
headers: {"Accept": "Application/json"}, body: body)
.then((http.Response response) => print(response.statusCode));
} catch (e) {
print(e);
}
}
Он выдает код ошибки 404.
Ниже приведен результат postman:
Ответ №1:
Вы устанавливаете неправильные заголовки. Accept
Заголовок предназначен для определения того, какой тип результата вы ожидаете от сервера. Из вашего скриншота (и данных) кажется совершенно ясным, что вы ожидаете image/jpg
. С другой стороны, вам не хватает Content-Type
заголовка, который определяет, какой тип данных вы отправляете с вашим запросом, в вашем случае application/json
. Поэтому сервер, вероятно, не может правильно проанализировать тело.
Предполагая, что jsonEncode
это просто что-то вроде JSON.stringify
того, что вы должны сделать что-то вроде следующего
Future apiCall() async {
var body =
jsonEncode({"filepath": "patient/reports/1602333458533-Liver.jpg"});
try {
await http
.post('http://3.6.197.52:3100/downloadFile',
headers: {"Content-Type": "application/json"}, body: body)
.then((http.Response response) => print(response.statusCode));
} catch (e) {
print(e);
}
}
Комментарии:
1. тот же json кодировал отправку PDF-файла, но все еще не работает
2. @s.j 404 означает, что используемый вами URL-адрес неизвестен на сервере
3. передача аналогична передаче в postman моего api post с 3 параметрами запроса и одним параметром тела.
4. сейчас он не работает на локальном сервере
5. @s.j очевидно, что вы не передаете то же самое. Если бы это было так, вы бы получили тот же ответ.