Я пытаюсь вызвать API с пользовательским телом, но всегда одна и та же ошибка. Ошибка 400 И ответ API «не может json/yaml декодировать аргумент»
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'dart:developer' as developer;
Future\<dynamic\> ApiDiolos() async {
final mapHeader = {
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-Diolos-Key':
'My-Custom-API-Key'
};
Uri uri = Uri.parse("https://api.diolos.com/myapipage.php");
var customBody = {};
customBody\["action"\] = "6";
customBody\["limit"\] = "null";
customBody\["offset"\] = "0";
final response = await http.post(uri,
headers: mapHeader,
body: json.encode(customBody.toString()),
encoding: Encoding.getByName('utf-8'));
}
void main() {
ApiDiolos();
}
С почтальоном все работает нормально. Я надеюсь, что вы могли бы помочь мне с этим вопросом.
У меня есть этот вывод. флаттер: только кодирование JSON: "{действие: 6, предел: ноль, смещение: 0}"
Передайте переменную карты напрямую для кодирования:
body: json.encode(customBody.toString()),
body: json.encode(customBody),
после этого убедитесь в следующем:
Посмотрите на следующий код и попробуйте его реорганизовать:
Future<Map?> ApiDiolos() async {
final mapHeader = {
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-Diolos-Key': 'XXXXXXXXXXXXXXXXXXXX' // provide an authorized key
};
Uri uri = Uri.parse(
"https://api.diolos.com/myapipage.php"); // make sure it's a correct URL
var customBody = {"action": "6", "limit": "null", "offset": "0"};
final response =
await http.post(uri, headers: mapHeader, body: json.encode(customBody));
if (response.statusCode == 200) {
return json.decode(response.body);
}
return null;
}
void main() async {
print(await ApiDiolos()); // you must wait for the Future to get completed
}
Привет. То же поведение, то же сообщение об ошибке. Спасибо.
@Оливье, ок, посмотри обновления.
Я все проверил, но с вашим кодом этот результат равен нулю. Ключ хороший и URL тоже. Тест с почтальоном работает нормально;) JSON с почтальоном возвращает что-то вроде этого: { "error": 0, "result": [ { "id": 1, "name": "String1" }, ..... .. }
просто распечатайте вывод
json.encode(customBody.toString()),
в терминале и посмотрите, что именно вы делаете!