Рубрики
Flutter

Проблема с headers при http-запросах во Flutter

Обычно я в проектах использую стандартную библиотеку http: ^0.12.2. Но недавно я столкнулся с ошибкой при отправке запроса, а точнее заголовка на сервер.

Проблема хаключается в том, что некоторые старые серверы чувствительны к регистру заголовка, например, им передаешь заголовок «Authorization», а пакет преобразует его в «authirization», что вызывает ошибку авторизации на сервере.

Так оказалось и в моем случае, при подключении к API Zadarma.com, их сервер оказался чувствительным в этом плане и ждет точное совпадение регистра.

Ответ сервера в этом случае отрицательный: {«status»:»Not authorized»}.

Для того, чтобы избежать подобной ошибки в заголовке, используйте стандартный класс HttpClient():

HttpClient httpClient = new HttpClient();

Преимущество данного подзода в том, что можео указать классу сохранить регистр при передаче headers.

За это отвечает параметр preserveHeaderCase: true. Ниже пример:

request.headers.set(header, "$key:$sign", preserveHeaderCase: true);

Полный пример:

var url = (Uri.https('api.zadarma.com', method, params)); 
httpClient = new HttpClient(); 
HttpClientRequest request = await httpClient.getUrl(url);
request.headers.set(header, "$key:$sign", preserveHeaderCase: true);
HttpClientResponse response = await request.close();

Рубрики
Flutter

Flutter API. Часть 1

Регистрация на beget.ru собственного VPS сервера. За 11 рублей в сутки.

Создавая приложения на Flutter на языке Dart, вы рано или поздно захотите сделать свой небольшой сервер, для своих собственных запросов API. В чем плюсы: не надо пользоваться никакими там сторонними сервисами, всегда можете оперативно внести изменения, увеличить заказчику стоимость за созданный, готовый API (шутка, а может и нет).

Из минусов, пожалуй, только то, что потратите на обучение сутки (в принципе, если следовать инструкции, можно все развернуть за 2-3 часа времени)