Как преобразовать cURL-X-u, -H, -d в http-сообщение в Flutter

#flutter #dart #curl

Вопрос:

Я столкнулся с проблемой при преобразовании cURL в http-сообщение flutter.

Ниже приведен доступный код завитка

 curl  -X POST url
-u <YOUR_KEY_ID>:<YOUR_SECRET>
-H 'content-type:application/json'
-d '{    "amount": 50000,    "currency": "INR",    "receipt": "rcptid_11"}'
 

Ниже приведен код, который я переписал в flutter с помощью flutter documentaion.

   Future<Album> createAlbum() async{
    final response = await http.post(
      Uri.parse('url'),
      headers: {
        HttpHeaders.authorizationHeader: '<$_key>:<$_secretKey>',
        HttpHeaders.contentTypeHeader: 'application/json',
      },
      body: jsonEncode(<String, String>{
        "amount": (amount*100).toString(),
        "currency": "INR",
        "receipt": date,
      }),
    );

    if (response.statusCode == 201) {
      print('Success');
      return Album.fromJson(jsonDecode(response.body));
    } else {
      throw Exception('Failed to create album.');
    }
  }
 

Все параметры определены в классе и используются в методе createAlbum. http post не отправляет данные.

Спасибо!

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

1. Было бы полезно прикрепить сообщение об ошибке, которое вы получили. До тех пор я предполагаю, что вы передаете неправильные типы параметров тела. «сумма» есть String в вашем коде, но завиток проходит int . Попробуйте удалить .toString() . А также проверьте, что дата является строкой.

2. Да, я удалил его и передал тип данных как int с помощью jsonEncode(<Строка>, <Строка><динамический>). Была проблема в заголовке(base64), а также в теле.

Ответ №1:

Вам нужно в base64 закодировать базовую аутентификацию и поставить строку Basic перед пользователем:пароль:

 String basicAuth =
      'Basic '   base64Encode(utf8.encode('$_key:$_secretKey'));
 

Затем используйте это для заголовка auth:

 // ... 
HttpHeaders.authorizationHeader: basicAuth,