Я сталкиваюсь с большой проблемой, когда делаю HTTP-запрос на сервер при использовании пакетов dio и http. Я отправляю токен в заголовке запроса, но всегда получаю неавторизованный ответ 401, несмотря на то, что этот запрос и токен работают нормально. в почтальоне, но когда я делаю запрос с помощью флаттера, всегда получает 401 несанкционированный, так что если кто-нибудь может мне помочь
Я попытался сделать запрос на получение, используя dio и http, но получил тот же ответ 401.
Проверил токен в почтальоне, все работает нормально,
проверил http io во внешних пакетах, чтобы пакет не преобразовывал заголовок в маленький регистр.
Уверен, что серверная часть получает маленькие буквы в заголовках, но всегда получает одни и те же ошибки 401.
import 'dart:convert';
import 'package:flutter/foundation.dart';
import 'package:http/http.dart' as http;
import 'package:graduation_project/core/localStorage/shared_preferences_storage.dart';
import '../../../core/constants/shared_pref_constants.dart';
class ItemsCartCall {
static Future<List<dynamic>> getCartItems() async {
final bearerToken =
SharedPreferencesManager.getString(LocalStorageConstants.userToken);
if (bearerToken == null || bearerToken.isEmpty) {
throw Exception('Bearer token is missing or invalid');
}
final headers = {
'Authorization': 'Bearer $bearerToken',
'Accept': 'application/json',
};
final response = await http.get(
Uri.parse('http://ikseer.onrender.com/orders/cart/'),
headers: headers,
);
(response.body.toString());
if (response.statusCode == 200) {
final res = jsonDecode(response.body);
await SharedPreferencesManager.storeStringVal(
LocalStorageConstants.cartId, res['id']);
return List<dynamic>.from(res['items']);
} else if (response.statusCode == 401) {
debugPrint(response.headers.toString());
debugPrint(response.body.toString());
throw Exception(response.body);
} else {
debugPrint(response.body.toString());
throw Exception(
'Server responded with status code: ${response.statusCode}');
}
}
}
Я уже это сделал, все тот же ответ 401.
Убедитесь, что ваш запрос был отправлен по протоколу HTTPS.
Сделайте успешный запрос в Postman и проверьте заголовки. Убедитесь, что все заголовки, отправленные Postman, также отправляются вашим приложением Flutter.