Рубрики
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();