diff --git a/lib/codegen/dart/http.dart b/lib/codegen/dart/http.dart index f301db19..8c1f3c8f 100644 --- a/lib/codegen/dart/http.dart +++ b/lib/codegen/dart/http.dart @@ -20,9 +20,10 @@ class DartHttpCodeGen { url: url, method: requestModel.method, queryParams: requestModel.enabledParamsMap, - headers: requestModel.enabledHeadersMap, - body: requestModel.requestBody, + headers: {...requestModel.enabledHeadersMap}, contentType: requestModel.requestBodyContentType, + hasContentTypeHeader: requestModel.hasContentTypeHeader, + body: requestModel.requestBody, formData: requestModel.formDataMapList, ); return next; @@ -36,8 +37,9 @@ class DartHttpCodeGen { required HTTPVerb method, required Map queryParams, required Map headers, - required String? body, required ContentType contentType, + required String? body, + required bool hasContentTypeHeader, required List> formData, }) { final uri = Uri.parse(url); @@ -50,16 +52,12 @@ class DartHttpCodeGen { final uriExp = declareVar('uri').assign(refer('Uri.parse').call([literalString(url)])); - final composeHeaders = headers; Expression? dataExp; if (kMethodsWithBody.contains(method) && (body?.isNotEmpty ?? false)) { final strContent = CodeExpression(Code('r\'\'\'$body\'\'\'')); dataExp = declareVar('body', type: refer('String')).assign(strContent); - - final hasContentTypeHeader = composeHeaders.keys - .any((k) => k.toLowerCase() == HttpHeaders.contentTypeHeader); if (!hasContentTypeHeader) { - composeHeaders.putIfAbsent(HttpHeaders.contentTypeHeader, + headers.putIfAbsent(HttpHeaders.contentTypeHeader, () => kContentTypeMap[contentType] ?? ''); } } diff --git a/lib/codegen/python/http_client.dart b/lib/codegen/python/http_client.dart index cc34cb70..b95ebf4c 100644 --- a/lib/codegen/python/http_client.dart +++ b/lib/codegen/python/http_client.dart @@ -152,10 +152,7 @@ body = b'\r\n'.join(dataList) if (headers.isNotEmpty || hasBody) { hasHeaders = true; - bool hasContentTypeHeader = headers.keys - .any((k) => k.toLowerCase() == HttpHeaders.contentTypeHeader); - - if (hasBody && !hasContentTypeHeader) { + if (hasBody && !requestModel.hasContentTypeHeader) { headers[HttpHeaders.contentTypeHeader] = kContentTypeMap[requestModel.requestBodyContentType] ?? ""; } diff --git a/lib/models/request_model.dart b/lib/models/request_model.dart index 49277d1f..9154e428 100644 --- a/lib/models/request_model.dart +++ b/lib/models/request_model.dart @@ -1,3 +1,4 @@ +import 'dart:io'; import 'package:flutter/foundation.dart'; import '../utils/utils.dart' show @@ -63,6 +64,9 @@ class RequestModel { rowsToFormDataMapList(requestFormDataList) ?? []; bool get isFormDataRequest => requestBodyContentType == ContentType.formdata; + bool get hasContentTypeHeader => enabledHeadersMap.keys + .any((k) => k.toLowerCase() == HttpHeaders.contentTypeHeader); + RequestModel duplicate({ required String id, }) { diff --git a/lib/services/http_service.dart b/lib/services/http_service.dart index 1b8b8395..46a66a91 100644 --- a/lib/services/http_service.dart +++ b/lib/services/http_service.dart @@ -29,9 +29,7 @@ Future<(http.Response?, Duration?, String?)> request( if (contentLength > 0) { body = requestBody; headers[HttpHeaders.contentLengthHeader] = contentLength.toString(); - final hasContentTypeHeader = headers.keys - .any((k) => k.toLowerCase() == HttpHeaders.contentTypeHeader); - if (!hasContentTypeHeader) { + if (!requestModel.hasContentTypeHeader) { headers[HttpHeaders.contentTypeHeader] = kContentTypeMap[requestModel.requestBodyContentType] ?? ""; } diff --git a/lib/utils/har_utils.dart b/lib/utils/har_utils.dart index da338a52..f7491bc1 100644 --- a/lib/utils/har_utils.dart +++ b/lib/utils/har_utils.dart @@ -136,10 +136,7 @@ Map requestModelToHARJsonRequest( var headers = useEnabled ? requestModel.enabledHeadersMap : requestModel.headersMap; if (headers.isNotEmpty || hasBody) { - bool hasContentTypeHeader = headers.keys - .any((k) => k.toLowerCase() == HttpHeaders.contentTypeHeader); - - if (hasBody && !hasContentTypeHeader) { + if (hasBody && !requestModel.hasContentTypeHeader) { var m = { "name": "Content-Type", "value": kContentTypeMap[requestModel.requestBodyContentType] ?? ""