#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,