fromUint8ListToRequest static method
Implementation
static HttpParseRes fromUint8ListToRequest(Uint8List data) {
final headerEndIndex = _findHeaderEnd(data);
bool isChunked = false;
http.Request? request;
if (headerEndIndex != -1) {
// 解析Content-Length确定是否接收完整
final headersData = data.sublist(0, headerEndIndex);
String headersString;
try {
headersString = utf8.decode(headersData, allowMalformed: true);
} catch (e) {
headersString = latin1.decode(headersData);
}
final contentLengthMatch = RegExp(r'content-length:\s*(\d+)', caseSensitive: false)
.firstMatch(headersString);
if (contentLengthMatch != null) {
final contentLength = int.tryParse(contentLengthMatch.group(1) ?? '0') ?? 0;
final totalLength = headerEndIndex + 4 + contentLength;
if (data.length >= totalLength) {
request = requestParse(Uint8List.fromList(data.sublist(0, totalLength)));
} else {
// 继续等待更多数据
isChunked = true;
}
} else if (headersString.contains(RegExp(r'transfer-encoding:\s*chunked', caseSensitive: false))) {
// 处理分块传输编码
if (_isChunkedDataComplete(data, headerEndIndex)) {
request = requestParse(Uint8List.fromList(data));
} else {
isChunked = true;
}
} else {
// 没有Content-Length且不是分块传输,假设已完成
request = requestParse(Uint8List.fromList(data));
}
}
return HttpParseRes(request: request, isChunked: isChunked);
}