Fix http.Request preparation

This commit is contained in:
Ankit Mahato
2025-04-20 03:09:49 +05:30
parent 834aef6f3d
commit 287bc45aa5

View File

@ -4,6 +4,7 @@ import 'dart:io';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import 'package:seed/seed.dart'; import 'package:seed/seed.dart';
import '../consts.dart'; import '../consts.dart';
import '../extensions/extensions.dart';
import '../models/models.dart'; import '../models/models.dart';
import '../utils/utils.dart'; import '../utils/utils.dart';
import 'http_client_manager.dart'; import 'http_client_manager.dart';
@ -33,6 +34,7 @@ Future<(HttpResponse?, Duration?, String?)> sendHttpRequest(
if (uriRec.$1 != null) { if (uriRec.$1 != null) {
Uri requestUrl = uriRec.$1!; Uri requestUrl = uriRec.$1!;
Map<String, String> headers = requestModel.enabledHeadersMap; Map<String, String> headers = requestModel.enabledHeadersMap;
bool overrideContentType = false;
HttpResponse? response; HttpResponse? response;
String? body; String? body;
try { try {
@ -43,16 +45,15 @@ Future<(HttpResponse?, Duration?, String?)> sendHttpRequest(
if (kMethodsWithBody.contains(requestModel.method)) { if (kMethodsWithBody.contains(requestModel.method)) {
var requestBody = requestModel.body; var requestBody = requestModel.body;
if (requestBody != null && !isMultiPartRequest) { if (requestBody != null &&
var contentLength = utf8.encode(requestBody).length; !isMultiPartRequest &&
if (contentLength > 0) { requestBody.isNotEmpty) {
body = requestBody; body = requestBody;
headers[HttpHeaders.contentLengthHeader] = if (requestModel.hasContentTypeHeader) {
contentLength.toString(); overrideContentType = true;
if (!requestModel.hasContentTypeHeader) { } else {
headers[HttpHeaders.contentTypeHeader] = headers[HttpHeaders.contentTypeHeader] =
requestModel.bodyContentType.header; requestModel.bodyContentType.header;
}
} }
} }
if (isMultiPartRequest) { if (isMultiPartRequest) {
@ -93,12 +94,13 @@ Future<(HttpResponse?, Duration?, String?)> sendHttpRequest(
case HTTPVerb.put: case HTTPVerb.put:
case HTTPVerb.patch: case HTTPVerb.patch:
case HTTPVerb.delete: case HTTPVerb.delete:
final request = http.Request( final request = prepareHttpRequest(
requestModel.method.name.toUpperCase(), url: requestUrl,
requestUrl, method: requestModel.method.name.toUpperCase(),
headers: headers,
body: body,
overrideContentType: overrideContentType,
); );
if (body != null) request.body = body;
request.headers.addAll(headers);
final streamed = await client.send(request); final streamed = await client.send(request);
response = await http.Response.fromStream(streamed); response = await http.Response.fromStream(streamed);
break; break;
@ -140,3 +142,27 @@ Future<(HttpResponse?, Duration?, String?)> sendHttpRequest(
void cancelHttpRequest(String? requestId) { void cancelHttpRequest(String? requestId) {
httpClientManager.cancelRequest(requestId); httpClientManager.cancelRequest(requestId);
} }
http.Request prepareHttpRequest({
required Uri url,
required String method,
required Map<String, String> headers,
required String? body,
bool overrideContentType = false,
}) {
var request = http.Request(method, url);
if (headers.getValueContentType() != null) {
request.headers[HttpHeaders.contentTypeHeader] =
headers.getValueContentType()!;
if (!overrideContentType) {
headers.removeKeyContentType();
}
}
if (body != null) {
request.body = body;
headers[HttpHeaders.contentLengthHeader] =
request.bodyBytes.length.toString();
}
request.headers.addAll(headers);
return request;
}