Я разрабатываю флаттер-приложение, подключающееся к серверной части отдыха. При попытке запроса POST с данными я получаю сообщение об ошибке
Необработанное исключение: HttpException: соединение закрыто до получения полного заголовка, uri = http://79.xxx.yyy.zzz/api/Device/Login? ... tc7me7rvLx
Это код вызова POST:
Future makePost(String param, String content) async { окончательный контекст = SecurityContext.defaultContext; context.allowLegacyUnsafeRenegotiation = true; конечный клиент = HttpClient (контекст: контекст); окончательный запрос = await client.postUrl(Uri.parse('http://xxx.yyy.zzz.242/api/Device/Login?param='+param) ); request.headers.set(HttpHeaders.contentTypeHeader, "application/json;"); request.persistentConnection = ложь; request.write(содержание); окончательный ответ = ожидайте request.close(); response.transform(utf8.decoder).listen((содержание) { распечатать (содержимое); }); обратный ответ;
Уже попытка:
[*]Понижение версии AVD до Android Pie (API 28) [*]Запуск на физическом устройстве вместо AVD. [*]DIO/HTTPCLient, оба не работают [*]Протестировал сообщение с данными на другом фиктивном сервере и сработало. [*]Невозможно решить, используя информацию из этого сообщения.
Примечания:
[*]отправка POST без каких-либо данных не приводит к ошибке [*]Для сортировки я создал API-клиент на C#, отправляющий тот же POST, и он работает, поэтому с сервером все в порядке. [*]игнорировать значение параметра param, которое не обсуждается [*]Просмотр с помощью Wireshark показывает, что приложение Flutter отправляет некоторые данные запроса в исходном TCP-пакете перед пакетом POST. В то время как приложение C# .net отправляет данные запроса только в пакете HTTP POST. [*]Уже пробовал обратиться к другому API HTTP (без SSL) с помощью запроса GET и получил ответ. Таким образом, настройки Android фактически разрешают HTTP-трафик (см. снимок экрана ниже).
.net:

флаттер с использованием httpclient

флаттер с использованием ванильного http

Трафик попадает в другой API HTTP (без HTTPS)

Мобильная версия