PostMan работает, но http выдает ошибку 404 при флаттере

#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:

Результат Post Man

Ответ №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 очевидно, что вы не передаете то же самое. Если бы это было так, вы бы получили тот же ответ.