Невозможно добавить заголовок для метода публикации в дио во Flutter

Я использую dio: ^ 3.0.4. Любой, пожалуйста, помогите мне найти решение для добавления заголовка. вот мой код:

FormData formData = 
    new FormData.fromMap({"files": await MultipartFile.fromFile(filePath.path, filename: 'photo')
          });

  Response response = await dio.post("***********",
    data: formData,
    onSendProgress: (int sent, int total) {
      print("$sent $total");
    },
    options: Options(
      headers: {
        "authorization": "*************"
      },
      followRedirects: false,
      validateStatus: (status) {
        return status <= 500;
      }
    ),
  );

Когда я печатаю заголовок.

печать (response.headers);

Результат:

флаттер: контент-тип: текст / HTML; charset = соединение UTF-8: закрыть кеш-контроль: без кеша, частное кодирование передачи: дата фрагмента: четверг, 7 ноября 2019 г., 14:29:02 Сервер по Гринвичу: Apache / 2.4.18


person Vexal    schedule 07.11.2019    source источник
comment
Вы печатаете заголовки ответов, которые в основном выглядят правильно для заголовков ответов. Что вы пытаетесь напечатать?   -  person Richard Heap    schedule 07.11.2019
comment
@RichardHeap Я пытаюсь добавить ключ авторизации в заголовок, но когда я отправляю на сервер, сервер не может получить заголовок авторизации.   -  person Vexal    schedule 08.11.2019
comment
Убедитесь, что ваш сервер принимает имя заголовка authorization в нижнем регистре. Dart обычно вводит все названия заголовков в нижний регистр. Используйте Postman, чтобы убедиться, что имя заголовка в нижнем регистре работает.   -  person Richard Heap    schedule 08.11.2019
comment
Только что обнаружил проблему с заголовком проверки на стороне сервера. Это не работает с apache_request_headers() в Laravel, необходимо использовать req->request();.   -  person Vexal    schedule 14.11.2019
comment
Вероятно, лучше всего удалить этот вопрос, поскольку решение на самом деле не связано с вопросом. Ваш код Dart оказался правильным.   -  person Richard Heap    schedule 14.11.2019


Ответы (4)


Ключ библиотеки Dio работает отлично в моем случае, если мы передаем значение ключа small case

Например,

Dio dio = new Dio();
dio.options.headers['content-Type'] = 'application/json';
dio.options.headers["authorization"] = "token ${token}";
response = await dio.post(url, data: data);                                                      

убедитесь, что вы пишете ключ в маленьком регистре, это работает для меня.

person Dharmesh Mansata    schedule 08.11.2019
comment
Необязательно писать ключи в строчных буквах. Это просто чувствительно к регистру. - person Aryeetey Solomon Aryeetey; 19.05.2020
comment
Я добавляю заголовок в перехватчики, но теперь запрос больше не пересылается. - person Faizan Mubasher; 07.04.2021

Есть некоторые похожие вопросы, на которые нет ответа.
Но у меня работает следующее.
Пожалуйста, используйте следующий фрагмент кода, чтобы установить атрибут заголовков.

  Dio dio = new Dio();
  dio.options.headers["Authorization"] = "Bearer ${token}";
  response = await dio.post(url, data: data);
person chunhunghan    schedule 08.11.2019

Вероятно, это ошибка, потому что я не мог указать content-type в нижнем регистре.

Content-Type работает.

options.headers = {'Content-Type': 'application/json', ...request.headers};

Не стесняйтесь обращаться к https://github.com/flutterchina/dio/issues/1045

person BartusZak    schedule 13.02.2021

Эта работа для меня после того, как я попробовал разные способы передачи аргумента в заголовки

    Dio dio = new Dio();
    dio.options.contentType = ContentType("application","x-www-form-urlencoded");
    dio.options.headers[HttpHeaders.authorizationHeader] ="Basic $clientCredentials";
person Ale Marquitti    schedule 02.04.2020