Я делаю почтовый запрос к веб-API ASP.Net для получения токена. Я могу сделать это успешно с помощью HTTP-пакета dart следующим образом:
Uri address = Uri.parse('https://myaddress:myport/token');
var response = await http.post(
address,
body: {
'username': 'MyUsername',
'password': 'MyPassword',
'grant_type': 'password'
},
).timeout(Duration(seconds: 20));
return response.body;
С Postman тоже нет проблем:
Теперь я хочу сделать то же самое с базовым классом dart:io, поскольку у тестового сервера есть самоподписанный сертификат, который, как я обнаружил, у пакета HTTP нет обхода (может быть, неправильно), но я не могу понять где я ошибаюсь, так как при отладке сервера запросы никогда не обрабатываются следующим кодом:
Uri address = Uri.parse('https://myaddress:myport/token');
HttpClient httpClient = HttpClient();
httpClient.connectionTimeout = Duration(seconds: 20);
httpClient.badCertificateCallback = ((X509Certificate cert, String host, int port) => true); // Allow self signed certificates
HttpClientRequest request = await httpClient.postUrl(address);
final Map<String, String> payLoad = {
'username': 'MyUsername',
'password': 'MyPassword',
'grant_type': 'password'
};
request.headers.contentType = new ContentType("application", "x-www-form-urlencoded", charset: "utf-8");
request.add(utf8.encode(json.encode(payLoad)));
// request.write(payLoad);
HttpClientResponse response = await request.close();
String responseBody = await response.transform(utf8.decoder).join();
httpClient.close();
responseBody всегда:
"{"error":"unsupported_grant_type"}"
Итак, я предполагаю, что моя кодировка или структура неверны, но со всеми возможностями, которые я пробовал, ничего не работает, любая помощь будет оценена.