send method
Implementation
Future<http.Response?> send(
http.Request request, {
Duration? timeout,
bool returnsBinary = false,
}) async {
try {
// Setze Verbindungstimeouts für die Verbindung
// Verwende einen längeren Standard-Timeout, wenn keiner angegeben ist
timeout ??= Duration(minutes: 2);
final req = _client.send(request);
final res = await req.timeout(timeout, onTimeout: () {
debugPrint('HTTP Request Timeout nach ${timeout?.inSeconds} Sekunden');
throw TimeoutException('HTTP Request Timeout', timeout);
});
try {
final ret = await http.Response.fromStream(res);
return ret;
} catch (e) {
debugPrint('Fehler beim Verarbeiten des Response-Streams: $e');
// Versuche es noch einmal mit einem neuen Request, wenn der Stream beschädigt ist
if (e is IOException) {
debugPrint(
'IO-Fehler beim Lesen des Streams, möglicherweise Netzwerkunterbrechung');
}
rethrow;
}
} on SocketException catch (e) {
debugPrint('Socket-Fehler beim Senden des Requests: ${e.message}');
// Spezielle Behandlung für bestimmte Socket-Fehler
if (e.message.contains('Software caused connection abort') ||
e.message.contains('Write failed')) {
debugPrint(
'App wahrscheinlich im Hintergrund, Socket wurde vom System geschlossen');
}
rethrow;
} catch (e) {
debugPrint('Fehler beim Senden des Requests: $e');
rethrow;
}
}