Как сделать запрос HTTP POST с заголовком и телом в кодировке url в Flutter/Dart

#flutter #api #http #dart #post

Вопрос:

Я пытался отправить запрос post в конечную точку, для которой требуется закодировать как заголовок, так и тело запроса, однако до сих пор ответы, которые я получал, содержали 400 ошибок. До сих пор я получал запрос только с помощью запроса curl и клиента Thunder в VSCode. Ниже приведен текст моего запроса. Любая помощь была бы признательна, спасибо.

С помощью http-пакета flutter:

 Response response = await post(  Uri.parse(URL),   headers: {  'Authorization': 'Basic ${base64Encode(utf8.encode('$ID:$SECRET'))}',  'Content-Type': 'application/x-www-form-urlencoded',  },   encoding: Encoding.getByName('utf-8'),  body: {  'grant_type': 'refresh_token',  'refresh_token': refreshToken,  'redirect_uri':  redirectUri,  }  );  

Ошибка:

введите описание изображения здесь

С пакетом flutter Dio:

 Dio.Dio dio = Dio.Dio();  Dio.Response response = await dio.post(  URL,  data: {  'grant_type': 'refresh_token',  'refresh_token': refreshToken,  'redirect_uri':  redirectUri,  },  options:  Dio.Options(contentType: Dio.Headers.formUrlEncodedContentType, headers: lt;String, Stringgt;{'Authorization': 'Basic ${base64Encode(utf8.encode('$ID:$SECRET'))}'}));  

Ошибка:

введите описание изображения здесь

Комментарии:

1. Вы пробовали просто предоставлять body: 'grant_type=refresh_tokenamp;refresh_token=$refreshTokenamp;redirect_uri=$redirectUri' ? Afaik это то, что ожидает x-www-форма-urlencoded

2. все еще получаю то же самое сообщение об ошибке 400

Ответ №1:

По мере того, как вы получаете ответ с сервера 400, api попадает на сервер. Попробуйте выполнить отладку с бэкенда, чтобы узнать точное использование в деталях.